使用CMake构建测试而不使用CTest

15

以下是我想做的事情:

  • 输入make all将构建我的库及其文档。
  • 输入make test将构建我的库(如果需要),gtest,然后运行我的测试。
  • 输入make check将运行make test(如果需要)并运行可执行文件。

目前,我只能让第一个工作。我的问题在于gtest的条件包含。

GTest使用CMake,这很好,理论上我只需要使用add_subdirectory包含gtest目录,但这样gtest就总是会被构建。

我的结构现在是:

CMakeLists.txt     (我在这里为doc和库添加目标)
doc                (我的doxygen文档)
include            (我的头文件)
lib                (编译后的库存放位置)
src                (.cpp文件所在位置)
test
    CMakeLists.txt (我在这里为gtest和我的测试添加目标)
    bin            (测试可执行文件所在位置)
    contrib        (gtest所在位置)
    src            (我的测试)

我试图弄清楚如何将gtest添加为test目标的依赖项,但并不总是构建gtest。

我对学习CMake的信息非常烦恼,因为几乎没有什么深入的教程(可以在互联网上免费获得),如果有人知道这方面的信息,那将是太棒了。


如果你解决了这个问题,你有兴趣帮我将其添加到C++库项目模板(http://code.google.com/p/cpp-library-project-template/)吗?(当前的Subversion代码使用gmock/gtest和glog,尽管发布版本使用unittest ++。目前,它总是构建测试,并在运行“make”时执行测试)。 - Michael Aaron Safyan
2
哇,感觉有点傻。关键是要执行add_subdirectory(contrib/gtest EXCLUDE_FROM_ALL)add_executable(test EXCLUDE_FROM_ALL foo.cpp) - Nicklas A.
1个回答

10

关键在于执行 add_subdirectory(test EXCLUDE_FROM_ALL),这样该CMakeList.txt中的所有目标都不会被添加到ALL目标中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接