指定CTestTestfile.cmake的目标

时间:2017-07-05 20:32:28

标签: cmake ctest

执行cmake生成ctest输入时,如何直接指定cmake生成的CTestTestfile.cmake的目标目录?具体来说,我的测试套件是一个独立的cmake项目。我目前使用cmake将其添加到主include()项目中,但更合适的方法是使用add_subdirectory()。但是,add_subdirectory()会在CTestTestfile.cmake目录的子项目目录中安装build,但我需要build/ ctest才能找到它。

我在test_project中的文件CTestList.cmake中设置了测试宏。此文件包含在test_project/CMakeLists.txt的构建中:

include(CTest)
include(${CMAKE_CURRENT_LIST_DIR}/CTestList.cmake)

使用include()

project/
|-- CMakeLists.txt
|-- src/
|-- test_project/
`-- build/
    |-- CTestTestfile.cmake
    `-- test_project/

使用add_subdirectory()

project/
|-- CMakeLists.txt
|-- src/
|-- test_project/
`-- build/
    `-- test_project/
        `-- CTestTestfile.cmake

1 个答案:

答案 0 :(得分:2)

CMake的{​​{3}}和include命令非常不同。

虽然include命令与C和C ++的#include一样工作 - 将包含文件的内容加载到它出现的文件中 - add_subdirectory将一个子目录添加到构建中。这意味着当您使用add_subdirectory时,子目录中的变量CMakeLists.txt将成为不同范围的一部分,add_subdirectory变量的值也会不同。只需将以下行添加到test_project/CMakeLists.txt,然后尝试includeadd_subdirectory添加:

message(STATUS "The files will be generated into: " ${CMAKE_CURRENT_BINARY_DIR})

CMAKE_CURRENT_BINARY_DIR可以测试当前目录及以下目录。因此,当您使用add_subdirecory代替include时,当前目录意味着build/test_project/ - 如上所述。

要确保CTestTestfile.cmake目录中也会创建build,只需在顶级enable_testing添加额外的CMakeLists.txt命令。