CMake:为ctest设置一个环境变量(或者从ctest/make test自动获取失败的测试输出)



我希望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)为ctest调用指定--output-on-failure标志:

 $ ctest --output-on-failure

是否有一种方法可以编写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)
# 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中设置的。

不能修改内置的test目标,但是您可以添加一个自定义的check目标,它通过--output-on-failure开关调用ctest,方法如下:

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目标器使用

现在有一个列表变量CMAKE_CTEST_ARGUMENTS,您可以在其中设置ctest参数。

https://cmake.org/cmake/help/latest/variable/CMAKE_CTEST_ARGUMENTS.html

最新更新