0

我正在使用 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
     )

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

提前谢谢了,

4

1 回答 1

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 脚本。

于 2018-11-23T21:26:30.080 回答