执行cmake
生成ctest
输入时,如何直接指定cmake
生成的CTestTestfile.cmake
的目标目录?具体来说,我的测试套件是一个独立的cmake项目。我目前使用include()
将其添加到主cmake
项目中,但更合适的方法是使用add_subdirectory()
.但是,add_subdirectory()
build
目录中的子项目目录中安装CTestTestfile.cmake
,但我需要它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
CMake
的include
和add_subdirectory
命令非常不同。
虽然include
命令的工作方式类似于 C 和 C++ 的#include
– 将包含文件的内容加载到它出现的文件中 – 但add_subdirectory
会向构建添加一个子目录。这意味着当您使用add_subdirectory
子目录CMakeLists.txt
内的变量将成为不同作用域的一部分,并且CMAKE_CURRENT_BINARY_DIR
变量的值也将不同。只需将以下行添加到test_project/CMakeLists.txt
,然后尝试include
它或通过add_subdirectory
添加它:
message(STATUS "The files will be generated into: " ${CMAKE_CURRENT_BINARY_DIR})
该enable_testing
允许测试当前目录及以下目录。因此,当您使用add_subdirecory
而不是include
时,当前目录意味着build/test_project/
– 如上所述。
要确保CTestTestfile.cmake
也将build
目录中创建,只需将额外的enable_testing
命令添加到顶级CMakeLists.txt
即可。