【问题标题】:CMake - How to create executable, but not add to "all" target?CMake - 如何创建可执行文件,但不添加到“全部”目标?
【发布时间】:2015-05-08 17:33:35
【问题描述】:

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

我该怎么做?

【问题讨论】:

    标签: cmake target ctest


    【解决方案1】:

    在创建测试可执行目标时设置EXCLUDE_FROM_ALL 标志以将目标从all 目标中排除:

    add_executable (Test${TestID} EXCLUDE_FROM_ALL Test${TestID}.cpp)
    

    确保在执行测试之前构建测试目标更加棘手。您不能使用add_dependencies 将依赖项添加到内置test 目标,因为test 目标属于一组仅存在于创建的构建系统。

    作为一种解决方法,您可以使用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,作为运行测试之前的第一步。

    【讨论】:

    • 嗯,这回答了我特别问的问题。但我真正想要的(难道你不能读懂我的想法吗?)是在我执行make test… 或ctest … 时构建这些目标。我怎样才能做到这一点?我已经更新了我的问题,所以你不必再读懂我的想法了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多