我正在使用 CTest 构建一些测试。通常,我可以简单地通过以下行来设置测试:
ADD_TEST(Test_Name executable args)
但是,我遇到了一个问题,我有一些测试需要运行两个命令才能运行,有什么方法可以在单个 ctest 中运行两个程序,或者我需要创建一个新的测试每个?
谢谢你。
该add_test
命令只接受一个可执行文件,但您可以运行任何真正是脚本的可执行文件。要以跨平台方式执行此操作,请在 CMake 本身中编写脚本。CMake 可以选择在运行或-P
时运行任意 CMake 脚本语言块,而不是在生成 Makefile 时。make
make test
遗憾的是,您不能将参数传递给这样的脚本。但是您可以将变量设置为值,这同样好。
您可以调用此脚本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
有一个简单的,虽然不是跨平台的方法来实现这一点。
在 Linux 中,您可以使用 bash 执行多个命令:
add_test(
NAME
TestName
COMMAND
bash -c "COMMAND1 ; \
COMMAND2 ; \
${CMAKE_CURRENT_BINARY_DIR}/testExecutable"
)