2013-04-22 5 views
34

Я хочу, чтобы ctest показывал мне результат неудачных тестов по умолчанию. То есть, я хочу запустить:CMake: настройка переменной окружения для ctest (или в противном случае получение теста с ошибкой теста ctest/make автоматически)

$ 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 dumps сбойные тесты выводятся defaul t на обычном вызове «сделать все тесты» БЕЗ использования экспорта глобальной переменной во время сеанса или использования настраиваемой цели, например make check (как описано here)?

Я знаю команду 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 выполняется в

ответ

22

встроенная 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.

+0

Спасибо. Полезный рецепт! – Jeet

+0

Спасибо, куча, именно то, что я искал! Любая идея, почему невозможно изменить цель 'test'? – lfxgroove

+0

Цель 'test' - одна из целей глобального по умолчанию CMake, которые нельзя изменить. Настройка команды 'test' в жестко закодированной в источнике CMake. – sakra