使用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
的一部分。
我该怎么做?
答案 0 :(得分:4)
在创建测试可执行目标时设置EXCLUDE_FROM_ALL
标志,以从all
目标中排除目标:
add_executable (Test${TestID} EXCLUDE_FROM_ALL Test${TestID}.cpp)
确保在执行测试之前构建测试目标更加棘手。您无法使用test
向内置add_dependencies
目标添加依赖项,因为test
目标属于一组保留目标(例如all
,{{1}和其他一些)只存在于创建的构建系统中。
作为一种解决方法,您可以使用TEST_INCLUDE_FILE目录属性在运行测试之前触发所需测试可执行文件的构建。使用以下内容在源目录中创建文件clean
:
BuildTestTargets.cmake.in
然后将以下代码添加到execute_process(COMMAND "@CMAKE_COMMAND@" --build . --target Test1)
execute_process(COMMAND "@CMAKE_COMMAND@" --build . --target Test2)
:
CMakeLists.txt
然后, CTest将在运行测试之前包含并运行文件configure_file("BuildTestTargets.cmake.in" "BuildTestTargets.cmake")
set_directory_properties(PROPERTIES TEST_INCLUDE_FILE
"${CMAKE_CURRENT_BINARY_DIR}/BuildTestTargets.cmake")
作为第一步。