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

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

问题描述

我想让ctest默认显示失败的测试输出。也就是说,我想运行:

  $ make all test 

并查看失败测试的任何输出,而不必 cat测试/临时/ LastTest.log



似乎有两种方法:



(1)设置 CTEST_OUTPUT_ON_FAILURE 环境变量:

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

(2)指定 / code> c> c>标志

  $ ctest  - 输出失败

有没有办法写CMakeLists.txt文件, ctests在一个正常的make all test调用中默认转储失败的测试输出,无需借助于在会话中全局导出环境变量,或者使用自定义目标,例如 make check 此处所述)?



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

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

#以下为运行测试
#progoram'hello'的shell设置环境变量,而不是运行ctest的shell
SET_TESTS_PROPERTIES(testhello
PROPERTIES ENVIRONMENTCTEST_OUTPUT_ON_FAILURE = 1)

环境变量是在执行测试程序的shell中设置的,而不是在执行ctest的shell中设置的。

解决方案

内置的 test 目标不能修改,但您可以添加自定义检查目标,调用 - - 输出失败以下列方式切换:code> ctest

  if(CMAKE_CONFIGURATION_TYPES)
add_custom_target(check COMMAND $ {CMAKE_CTEST_COMMAND}
--force-new-ctest-process --output-失败
--build-config$< CONFIGURATION>)
else()
add_custom_target(check COMMAND $ {CMAKE_CTEST_COMMAND}
--force-new-ctest-process - 输出失败)
endif()

自定义目标必须对于单构建类型和多构建构建置不同。在后一种情况下,必须使用 - build-config ctest >标志。默认情况下, - force-new-ctest-process 被内置的 test 目标使用。 p>

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

$ make all test

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) Setting the CTEST_OUTPUT_ON_FAILURE environmental variable:

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

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

 $ ctest --output-on-failure

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)?

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")

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.

解决方案

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()

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测试输出失败的测试结果)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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