代码之家  ›  专栏  ›  技术社区  ›  Leif Andersen

带有多个命令的CTEST

  •  11
  • Leif Andersen  · 技术社区  · 14 年前

    我正在用CTest建立一些测试。通常,我可以通过简单的行设置测试:

    ADD_TEST(Test_Name executable args)
    

    但是,我遇到了一个问题,我有一些测试需要运行两个命令才能使其正常工作,是否有任何方法可以在一个CTest中运行两个程序,或者是否需要为每个CTest创建一个新的测试?

    谢谢您。

    1 回复  |  直到 12 年前
        1
  •  14
  •   richq luc    14 年前

    这个 add_test 命令只接受一个可执行文件,但您可以运行任何真正是脚本的可执行文件。要以跨平台的方式执行此操作,请在cmake本身中编写脚本。CMake有 -P 运行时运行任意cmake脚本语言块的选项 make 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> 在生成生成生成文件时扩展到可执行文件的完整路径。当你奔跑 制作测试 或者类似的,它将运行“cmake-p runtests.cmake”,将cmd1和cmd2变量设置为适当的测试程序。然后脚本将按顺序执行您的2个程序。如果任何一个测试程序失败,整个测试都将失败。如果需要查看测试的输出,可以运行 make test ARGS=-V