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
目标属于一组保留目标(如 all
、clean
和其他一些)只存在于创建的构建系统中。
作为变通方法,您可以使用 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
作为测试 运行.
之前的第一步
我使用 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
目标属于一组保留目标(如 all
、clean
和其他一些)只存在于创建的构建系统中。
作为变通方法,您可以使用 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
作为测试 运行.