在不使用 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 构建测试的主要内容,如果未能解决你的问题,请参考以下文章