15

我正在使用 CTest 构建一些测试。通常,我可以简单地通过以下行来设置测试:

ADD_TEST(Test_Name executable args)

但是,我遇到了一个问题,我有一些测试需要运行两个命令才能运行,有什么方法可以在单个 ctest 中运行两个程序,或者我需要创建一个新的测试每个?

谢谢你。

4

2 回答 2

20

add_test命令只接受一个可执行文件,但您可以运行任何真正是脚本的可执行文件。要以跨平台方式执行此操作,请在 CMake 本身中编写脚本。CMake 可以选择在运行或-P时运行任意 CMake 脚本语言块,而不是在生成 Makefile 时。makemake 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

于 2010-06-18T16:20:09.077 回答
1

有一个简单的,虽然不是跨平台的方法来实现这一点。

在 Linux 中,您可以使用 bash 执行多个命令:

add_test(
    NAME
        TestName
    COMMAND
        bash -c "COMMAND1 ; \
            COMMAND2 ; \
            ${CMAKE_CURRENT_BINARY_DIR}/testExecutable"
)
于 2020-08-12T18:04:16.543 回答