CMake:为ctest设置一个环境变量(否则自动从ctest / make测试输出失败的测试结果) [英] CMake: setting an environmental variable for ctest (or otherwise getting failed test output from ctest/make test automatically)
问题描述
我想让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屋!