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