CMake:为 ctest 设置环境变量(或者自动从 ctest/make test 获取失败的测试输出) [英] CMake: setting an environmental variable for ctest (or otherwise getting failed test output from ctest/make test automatically)

查看:25
本文介绍了CMake:为 ctest 设置环境变量(或者自动从 ctest/make test 获取失败的测试输出)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望 ctest 默认显示失败的测试输出.也就是说,我要运行:

I want ctest to show me the failed tests output by default. That is, I want to run:

$ make all test

并查看失败测试的任何输出,而无需cat Testing/Temporary/LastTest.log.

and see any output of failed tests without having to cat Testing/Temporary/LastTest.log.

似乎有两种方法可以做到这一点:

It appears that there are two ways of doing this:

(1) 设置CTEST_OUTPUT_ON_FAILURE环境变量:

(1) Setting the CTEST_OUTPUT_ON_FAILURE environmental variable:

 $ CTEST_OUTPUT_ON_FAILURE=1 make all test
 $ # or CTEST_OUTPUT_ON_FAILURE=1 ctest

(2) 为 ctest 调用指定 --output-on-failure 标志:

(2) Specifying the --output-on-failure flag to the ctest invocation:

 $ ctest --output-on-failure

有没有办法编写一个 CMakeLists.txt 文件,这样 ctests 在正常的make all test"调用中默认转储失败的测试输出,而不需要在会话中全局导出环境变量或求助于自定义目标,例如make check(如所述在这里)?

Is there a way to write a CMakeLists.txt file such that ctests dumps failed tests output by default on a normal "make all test" invocation WITHOUT resorting to exporting the environmental variable globally in the session or resorting to a custom target like make check (as described here)?

我知道 SET_TESTS_PROPERTIES() 命令,但可以这样尝试:

I am aware of the SET_TESTS_PROPERTIES() command, but trying it out like this:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(testenv CXX)
ENABLE_TESTING()
ADD_EXECUTABLE(hello hello.cpp)
ADD_TEST(testhello hello)

# Following sets the environment variable for the shell in which the test
# progoram 'hello' is run, but not the shell in which ctest is run
SET_TESTS_PROPERTIES(testhello
    PROPERTIES ENVIRONMENT "CTEST_OUTPUT_ON_FAILURE=1")

并且实验表明环境变量是在执行测试程序的shell中设置的,而不是在执行ctest的shell中设置的.

and experimenting shows that the environmental variable is set in the shell that the test program is executed in, but not in the shell that ctest is executed in.

推荐答案

内置的 test 目标无法修改,但您可以添加自定义的 check 目标以下列方式使用 --output-on-failure 开关调用 ctest:

The built-in test target cannot be modified, but you can add a custom check target which invokes ctest with the --output-on-failure switch in the following way:

if (CMAKE_CONFIGURATION_TYPES)
    add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} 
        --force-new-ctest-process --output-on-failure 
        --build-config "$<CONFIGURATION>")
else()
    add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} 
        --force-new-ctest-process --output-on-failure)
endif()

必须为单一构建类型和多配置构建设置不同的自定义目标.在后一种情况下,必须使用 --build-config 标志将活动构建配置传递给 ctest 调用.--force-new-ctest-process 由内置的 test 目标默认使用.

The custom target has to be set up differently for single build type and multi-configuration builds. In the latter case, the active build configuration has to be passed on to the ctest invocation using the --build-config flag. The --force-new-ctest-process is used by the built-in test target by default.

这篇关于CMake:为 ctest 设置环境变量(或者自动从 ctest/make test 获取失败的测试输出)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆