【问题标题】:add_custom_command after running a test (CMakeLists)运行测试后的 add_custom_command (CMakeLists)
【发布时间】:2017-10-10 07:58:44
【问题描述】:

我正在使用 CMakeLists.txt 文件来生成(以及其他)一些测试。因此我有类似的东西

ENABLE_TESTING() ADD_TEST(NAME my_name COMMAND my_command)

我想在测试运行后添加一些命令。我发现 ADD_CUSTOM_COMMAND 似乎完全符合我的需要,但不幸的是它不起作用。 这是我尝试过的

ADD_CUSTOM_COMMAND(
     TARGET my_name
     POST_BUILD
     COMMAND my_other_command
     )

看来我没有使用正确的目标。 你能帮我告诉我应该做什么吗?

非常感谢,

【问题讨论】:

  • 很难说不知道你想用自定义命令做什么。 FIXTURES_CLEANUP 测试属性会是您正在寻找的吗?您只需定义另一个测试,例如用于清理任务并相应地添加具有此属性的依赖项。
  • 感谢您的回答。实际上,我需要启动命令来生成代码覆盖率报告(使用 gcov 和 lcov)它无法在测试运行之前完成,所以我希望定义除主测试之外执行的新命令。因此我认为不能使用 FIXTURES_CLEANUP 。我希望我说得更清楚。
  • 一种选择是生成一个 CMake 脚本,然后让 test 命令执行您的 CMake 脚本。生成的脚本将调用您的测试,然后执行覆盖率报告。如果您不关心平台可移植性,只需编写一个基于参数执行相同操作的 bash 脚本(或其他),并让您的测试命令使用合适的参数调用您的脚本。
  • “执行 CMake 脚本的脚本”是什么意思?我需要的是一种使命令“make test”运行ADD_TEST 中的测试描述以及ADD_CUSTOM_COMMAND 中的测试描述的方法

标签: cmake cmake-custom-command


【解决方案1】:

我的目标是在测试执行完成后执行 diff 命令。这与您面临的问题非常相似。我使用了这个cmake 脚本技术。留下它作为答案,以防它帮助别人。

在原来的 CMakeLists.txt 文件中我添加了一个测试

add_test(NAME testCommand
COMMAND ${CMAKE_COMMAND}
        -DCMD1=$<TARGET_FILE:target>
        -DTEST_DATA_DIR=${CMAKE_SOURCE_DIR}
-P ${CMAKE_SOURCE_DIR}/runtests.cmake)

在包含 CMakeLists.txt 文件的目录中创建一个名为 runtests.cmake 的文件。这个新文件将保存执行测试的命令并在之后运行命令

include(FindUnixCommands)

macro(EXEC_CHECK CMD)
    execute_process(COMMAND ${CMD} ${TEST_DATA_DIR}/test_input.txt RESULT_VARIABLE CMD_RESULT)
if(CMD_RESULT)
    message(FATAL_ERROR "Error running ${CMD}")
else()
    if (BASH)
        execute_process(COMMAND ${BASH} -c "diff -b ${TEST_DATA_DIR}/test_input.txt ${TEST_DATA_DIR}/test_output.txt" RESULT_VARIABLE RES)
        if(RES)
            message(FATAL_ERROR "Diff is not clean")
        endif()
    else(BASH)
        message(FATAL_ERROR "BASH not found : no diff script run")
    endif(BASH)
endif()
endmacro()
exec_check(${CMD1})

我现在可以从构建目录发出make test,它会正确获取 cmake 脚本。

【讨论】:

    猜你喜欢
    • 2011-02-25
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 2016-09-19
    相关资源
    最近更新 更多