2013-04-22 20 views
34

Chcę, aby ctest domyślnie pokazywał mi wyniki testów zakończonych niepowodzeniem. Oznacza to, że chcę, aby uruchomić:CMake: ustawienie zmiennej środowiskowej dla ctest (lub w inny sposób otrzymanie błędnego wyniku testu z testu ctest/make automatycznie)

$ make all test 

i ma wyniku nieudanych testów bez konieczności cat Testing/Temporary/LastTest.log.

Wydaje się, że istnieją dwa sposoby, aby to zrobić:

(1) Ustawianie CTEST_OUTPUT_ON_FAILURE zmienną środowiskową:

$ CTEST_OUTPUT_ON_FAILURE=1 make all test 
$ # or CTEST_OUTPUT_ON_FAILURE=1 ctest 

(2) Określanie flagę --output-on-failure do ctest inwokacji:

$ ctest --output-on-failure 

Czy istnieje sposób na zapisanie pliku CMakeLists.txt takiego, że ctests zrzuca wyniki testów zakończone niepowodzeniem przez defaul t na normalnym wywołaniu "make all test" BEZ odwoływania się do eksportowania zmiennej środowiskowej globalnie w sesji lub odwoływania się do niestandardowego celu, takiego jak make check (jak opisano here)?

Jestem świadomy komendy SET_TESTS_PROPERTIES(), ale próbuje ją tak:

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

i eksperymentowania pokazuje, że zmienna środowiskowa jest ustawiona w powłoce, że program testowy jest wykonywany w, ale nie w powłoki, które ctest jest wykonywany w

Odpowiedz

22

wbudowany test docelowego nie mogą być modyfikowane, ale można dodać niestandardową check cel, który wywołuje ctest z wyłącznikiem w następujący sposób --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() 

Cel niestandardowy musi być różnie skonfigurowany dla wersji typu pojedynczej kompilacji i wielu konfiguracji. W tym ostatnim przypadku aktywna konfiguracja kompilacji musi zostać przekazana do wywołania ctest przy użyciu flagi --build-config. Model --force-new-ctest-process jest domyślnie używany przez wbudowany obiekt docelowy test.

+0

Dzięki. Przydatny przepis! – Jeet

+0

Dziękuję kupie, dokładnie to, czego szukałem! Masz pomysł, dlaczego nie można zmodyfikować celu 'test'? – lfxgroove

+0

Cel 'test' jest jednym z globalnych domyślnych celów CMake, którego nie można modyfikować. Konfiguracja komendy 'test' na dysku twardym w źródle CMake. – sakra