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) Задание --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.

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 флаг. The --force-new-ctest-process используется встроенный test target по умолчанию.