我正在使用 CTest 构建一些测试。通常,我可以简单地通过以下行设置测试:
ADD_TEST(Test_Name executable args)
但是,我遇到了一个问题,我有一些测试需要运行两个命令才能工作,有什么方法可以在一个 ctest 中运行两个程序,或者我需要创建一个新的程序对每个进行测试?
谢谢。
The add_test
命令仅接受一个可执行文件,但您可以运行任何实际上是脚本的可执行文件。要以跨平台方式执行此操作,请在 CMake 本身中编写脚本。 CMake 有-P
运行时运行任意 CMake 脚本语言块的选项make
or make test
,而不是在 Makefile 生成时。
遗憾的是,您无法将参数传递给这样的脚本。但是您可以将变量设置为值,这同样好。
您可以调用此脚本runtests.cmake
,它运行命令 CMD1 和 CMD2 并检查每个命令是否有非零返回代码,如果发生这种情况,则从 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(${CMD1})
exec_check(${CMD2})
...然后添加您的测试用例,如下所示:
add_executable(test1 test1.c)
add_executable(test2 test2.c)
add_test(NAME test
COMMAND ${CMAKE_COMMAND}
-DCMD1=$<TARGET_FILE:test1>
-DCMD2=$<TARGET_FILE:test2>
-P ${CMAKE_CURRENT_SOURCE_DIR}/runtests.cmake)
$<TARGET_FILE:test1>
在构建文件生成时扩展到可执行文件的完整路径。当你跑步时make test
或等效的,这将运行“cmake -P runtests.cmake”,将 CMD1 和 CMD2 变量设置为适当的测试程序。然后该脚本将按顺序执行您的 2 个程序。如果其中一个测试程序失败,则整个测试失败。如果您需要查看测试的输出,可以运行make test ARGS=-V
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)