CMake:为ctest设置环境变量(否则将自动从ctest / make test获得失败的测试输出)

问题描述 投票:39回答:1

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

$ make all test

并且无需cat Testing/Temporary/LastTest.log即可查看失败的测试的任何输出。

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

((1)设置CTEST_OUTPUT_ON_FAILURE环境变量:

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

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

 $ ctest --output-on-failure

是否存在编写CMakeLists.txt文件的方法,以使ctests转储默认情况下在正常的“进行所有测试”调用时输出的失败测试,​​而无需求助于在会话中全局导出环境变量或求助于[ C0](如make check所述)?

我知道here命令,但是像这样尝试它:

SET_TESTS_PROPERTIES()

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

testing cmake environment-variables output ctest
1个回答
29
投票

内置的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") 目标不能被修改,但是您可以添加一个自定义的test目标,该目标通过check开关以以下方式调用ctest

--output-on-failure

对于单个构建类型和多配置构建,必须对自定义目标进行不同的设置。在后一种情况下,必须使用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() 标志将活动的构建配置传递给ctest调用。内置--build-config目标默认使用--force-new-ctest-process


0
投票

在CMake 3.17 test中,有一个新变量release notes,您可以将其设置为将任何命令行参数(包括CMAKE_CTEST_ARGUMENTS)传递给CTest。在您的特定情况下,您现在可以简单地将其添加到CMakeLists.txt:

--output-on-failure
© www.soinside.com 2019 - 2024. All rights reserved.