使用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
。