我使用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。 你能告诉我我应该做些什么来帮助我吗?
非常感谢,
答案 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脚本。