43

我希望 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 在正常的“全部测试”调用中默认转储失败的测试输出,而无需在会话中全局导出环境变量或使用自定义目标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中设置的。

4

2 回答 2

31

内置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-processtest

于 2013-04-23T07:12:06.673 回答
3

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

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

于 2020-07-11T07:27:27.397 回答