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

Jee*_*eet 36 testing cmake environment-variables ctest output

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

$ make all test
Run Code Online (Sandbox Code Playgroud)

并且无需查看任何失败测试的输出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
Run Code Online (Sandbox Code Playgroud)

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

 $ ctest --output-on-failure
Run Code Online (Sandbox Code Playgroud)

是否有办法编写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")
Run Code Online (Sandbox Code Playgroud)

并且试验表明环境变量是在执行测试程序的shell中设置的,而不是在执行ctest的shell中设置的.

sak*_*kra 25

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()
Run Code Online (Sandbox Code Playgroud)

必须为单个构建类型和多配置构建设置不同的自定义目标.在后一种情况下,必须ctest使用--build-config标志将活动构建配置传递给调用.该--force-new-ctest-process由内置使用test的缺省目标.

  • 真的很遗憾,通过默认设置选项或设置环境变量来改变测试命令的行为是不可能的...... (9认同)