【问题标题】:CTest with multiple commands使用多个命令进行 CTest
【发布时间】:2010-06-17 20:06:15
【问题描述】:

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

ADD_TEST(Test_Name executable args)

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

谢谢。

【问题讨论】:

    标签: cmake command ctest


    【解决方案1】:

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

    $&lt;TARGET_FILE:test1&gt; 在生成文件时扩展为可执行文件的完整路径。当您运行make test 或等效程序时,这将运行“cmake -P runtests.cmake”,将 CMD1 和 CMD2 变量设置为适当的测试程序。然后该脚本将依次执行您的 2 个程序。如果任一测试程序失败,则整个测试失败。如果需要查看测试的输出,可以运行make test ARGS=-V

    【讨论】:

    • 嗯...这看起来不错,尽管我需要在测试期间运行脚本,而不是构建时间或生成文件生成时间。
    • 哦,“构建时间”是指当你运行任何make 命令时,包括make test。与运行 cmake 来生成 Makefile 不同。我现在已经在答案中澄清了这一点。
    【解决方案2】:

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

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

    add_test(
        NAME
            TestName
        COMMAND
            bash -c "COMMAND1 ; \
                COMMAND2 ; \
                ${CMAKE_CURRENT_BINARY_DIR}/testExecutable"
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 2010-10-01
      • 2014-12-17
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多