我将在Ctest中运行测试脚本,并将生成的输出文件与某些预期文件进行比较,这意味着我需要在一个ctest中运行两个命令。根据CTest with multiple commands
我有一个Script.cmake:
macro(EXEC_CHECK CMD)
execute_process(COMMAND ${CMD} RESULT_VARIABLE CMD_RESULT)
if(CMD_RESULT)
message(FATAL_ERROR "Error running ${CMD}")
endif()
endmacro()
exec_check(${CMAKE_CURRENT_SOURCE_DIR}/test.sh)
exec_check(${CMAKE_COMMAND -E compare_files test_output ${CMAKE_CURRENT_SOURCE_DIR}/expected_output)
以及CMakeLists.txt:
add_test(NAME Atest
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/script.cmake)
但是当我运行ctest时,我得到了[[Errors:
Error at ......../script.cmake:
Error running ....../test.sh
Call stack: ....../script.cmake:10(exec_check)
my非常简单,只调用一个任务并传入两个参数-输入和输出:test.sh
./A.tsk --input inputFileA --output test_output
我也尝试用替换
my test.sh
exit 0
但是我仍然遇到相同的错误,所以我不认为这与test.sh有关。怎么了?谢谢!
将我的评论变成答案:
因为add_test()
默认从与当前CMake源目录相对应的CMake binary目录运行,所以add_test()
也必须在此二进制目录中。 test.sh
中的代码会将Script.cmake
解释为相同的binary目录。否则,将导致此错误。
change
移至source目录。CMAKE_CURRENT_SOURCE_DIR