CMake的:设置一个环境变量用于CTEST(或以其他方式获取从CTEST失败的测试输出/测试使自动

2019-08-31 20:32发布

我想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")

和试验,环境变量是在该测试程序被执行,但无法在CTEST在执行壳壳设置节目。

Answer 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中使用的内置test默认目标。



文章来源: CMake: setting an environmental variable for ctest (or otherwise getting failed test output from ctest/make test automatically)