为 CTestTestfile.cmake 指定目的地

specify destination for CTestTestfile.cmake

执行cmake生成ctest输入时,如何直接指定cmake生成的CTestTestfile.cmake的目标目录?具体来说,我的测试套件是一个独立的cmake项目。我目前使用 include() 将它添加到主 cmake 项目中,但更合适的方法是使用 add_subdirectory()。然而,add_subdirectory()安装CTestTestfile.cmakebuild目录下的子项目目录中,但我需要在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

CMakeinclude and the 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.