CMake - 如何创建可执行文件,但不添加到 "all" 目标?

CMake - How to create executable, but not add to "all" target?

我使用 CMake 构建了一系列可执行文件,然后将其添加为测试,如下所示:

set(TestID 1)
add_executable (Test${TestID} Test${TestID}.cpp)

# Create test
configure_file(${TestID}.endf ${TestID}.endf COPYONLY)
add_test( NAME ${TestID} COMMAND Test${TestID} )

这工作正常——创建了可执行文件并正确添加了测试。但是,我不希望将测试可执行文件添加到 all 目标。

与其让我的测试与其他所有东西一起构建,不如让它们在测试执行之前构建;可能作为 make test 的一部分或作为 ctest.

的一部分

我该怎么做?

在创建测试可执行目标时设置 EXCLUDE_FROM_ALL 标志以将目标从 all 目标中排除:

add_executable (Test${TestID} EXCLUDE_FROM_ALL Test${TestID}.cpp)

确保在执行测试之前构建测试目标更加棘手。您不能使用 add_dependencies 向内置 test 目标添加依赖项,因为 test 目标属于一组保留目标(如 allclean 和其他一些)只存在于创建的构建系统中。

作为变通方法,您可以使用 TEST_INCLUDE_FILES 目录 属性 在测试 运行 之前触发构建所需的测试可执行文件。在源目录中创建文件 BuildTestTargets.cmake.in,内容如下:

execute_process(COMMAND "@CMAKE_COMMAND@" --build . --target Test1)
execute_process(COMMAND "@CMAKE_COMMAND@" --build . --target Test2)

然后将以下代码添加到您的 CMakeLists.txt:

configure_file("BuildTestTargets.cmake.in" "BuildTestTargets.cmake")
set_directory_properties(PROPERTIES TEST_INCLUDE_FILES
    "${CMAKE_CURRENT_BINARY_DIR}/BuildTestTargets.cmake")

CTest 然后将包含 运行 文件 BuildTestTargets.cmake 作为测试 运行.

之前的第一步