在不使用 CTest 的情况下使用 CMake 构建测试

Posted

技术标签:

【中文标题】在不使用 CTest 的情况下使用 CMake 构建测试【英文标题】:Building tests with CMake while not using CTest 【发布时间】:2011-08-02 08:30:37 【问题描述】:

这是我想做的:

输入 make all 将构建我的库和它的文档。 输入 make test 将构建我的库(如有必要)、gtest,然后是我的测试 如果需要,键入 make check 会运行 make test,然后运行可执行文件

现在我只设法让第一个工作。 我遇到的问题是 gtest 的条件包含。

Gtest 使用了很好的 CMake,理论上我需要做的就是将 gtest 目录包含在 add_subdirectory 中,但之后总是会构建 gtest。

我现在的结构是:

CMakeLists.txt(在这里我为 doc 和库添加目标) doc(我的 doxygen 文档) 包括(我的标题) lib(我编译的库所在的位置) src(我的 .cpp 文件所在的位置) 测试 CMakeLists.txt(在这里我为 gest 和我的测试添加目标) bin(测试可执行文件所在的位置) contrib (其中 gtest 是) src(我的测试)

我试图弄清楚如何将 gtest 作为依赖项添加到 test-target 但不是每次都构建 gtest。

我真的很生气,关于学习 CMake 的信息很少甚至没有,所以如果有人知道任何深入的教程(可在互联网上免费获得),那就太棒了。

【问题讨论】:

如果您知道这一点,您是否有兴趣帮助我将其添加到 C++ 库项目模板 (code.google.com/p/cpp-library-project-template) 中? (subversion 代码目前使用 gmock/gtest 和 glog,尽管发布的版本使用 unittest++。目前,它一直构建测试,并在运行“make”时执行测试)。 哇,现在感觉有点傻。诀窍是做add_subdirectory(contrib/gtest EXCLUDE_FROM_ALL)add_executable(test EXCLUDE_FROM_ALL foo.cpp) 【参考方案1】:

诀窍是执行add_subdirectory(test EXCLUDE_FROM_ALL),然后 CMakeList.txt 中的任何目标都不会添加到 ALL 目标中。

【讨论】:

以上是关于在不使用 CTest 的情况下使用 CMake 构建测试的主要内容,如果未能解决你的问题,请参考以下文章

在不调用析构函数的情况下结束 STL 容器的生命周期

带有geom_tile的热图如何在不使用构面的情况下根据另一个因素进行划分和重新排序

如何在不破坏移动和复制构造函数的情况下声明虚拟析构函数

如何在不再次运行配置脚本/cmake 的情况下修改安装路径

Solr - 在不返回搜索结果的情况下获取构面计数

如何在没有 CMake 的情况下构建 yaml-cpp