CMake:为 ctest 设置环境变量(或者自动从 ctest/make test 获取失败的测试输出) [英] CMake: setting an environmental variable for ctest (or otherwise getting failed test output from ctest/make test automatically)
问题描述
我希望 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屋!