首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个命令的CTest

使用多个命令的CTest
EN

Stack Overflow用户
提问于 2010-06-18 04:06:16
回答 2查看 8.6K关注 0票数 15

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

代码语言:javascript
复制
ADD_TEST(Test_Name executable args)

然而,我遇到了一个问题,我有一些测试需要运行两个命令才能工作,有没有办法让我在一个ctest中运行两个程序,或者我需要为每个程序创建一个新的测试?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-19 00:20:09

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

遗憾的是,您不能将参数传递给这样的脚本。但是您可以将变量设置为值,这也是很好的做法。

您可以调用此脚本runtests.cmake,它运行命令CMD1和CMD2,并检查每个命令是否有非零返回代码,如果发生这种情况,将从CMake本身返回一个错误:

代码语言:javascript
复制
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})

..。然后像这样添加你的测试用例:

代码语言:javascript
复制
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变量设置为适当的测试程序。然后,脚本将按顺序执行您的两个程序。如果任何一个测试程序失败,整个测试都会失败。如果需要查看测试的输出,可以运行make test ARGS=-V

票数 20
EN

Stack Overflow用户

发布于 2020-08-13 02:04:17

虽然不是跨平台,但有一种简单的方法可以实现这一点。

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

代码语言:javascript
复制
add_test(
    NAME
        TestName
    COMMAND
        bash -c "COMMAND1 ; \
            COMMAND2 ; \
            ${CMAKE_CURRENT_BINARY_DIR}/testExecutable"
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3065220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档