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

时间:2015-05-08 17:33:36

标签: cmake target ctest

使用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的一部分。

我该怎么做?

1 个答案:

答案 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") 作为第一步。