运行测试后添加add_custom_command(CMakeLists)

时间:2017-10-10 07:58:45

标签: cmake add-custom-command

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

的东西

ENABLE_TESTING() ADD_TEST(NAME my_name COMMAND my_command)

我想在测试运行后添加somme命令。我发现ADD_CUSTOM_COMMAND似乎正是我所需要的,但遗憾的是它并不起作用。 这是我试过的

ADD_CUSTOM_COMMAND(
     TARGET my_name
     POST_BUILD
     COMMAND my_other_command
     )

似乎我没有使用正确的TARGET。 你能告诉我我应该做些什么来帮助我吗?

非常感谢,

1 个答案:

答案 0 :(得分:0)

我的目标是在测试执行完成后执行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脚本。