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



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

相关内容

  • 没有找到相关文章

最新更新