执行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
答案 0 :(得分:2)
CMake
的{{3}}和include
命令非常不同。
虽然include
命令与C和C ++的#include
一样工作 - 将包含文件的内容加载到它出现的文件中 - add_subdirectory
将一个子目录添加到构建中。这意味着当您使用add_subdirectory
时,子目录中的变量CMakeLists.txt
将成为不同范围的一部分,add_subdirectory
变量的值也会不同。只需将以下行添加到test_project/CMakeLists.txt
,然后尝试include
或add_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
命令。