2013-04-22 8 views
34

Voglio che venga visualizzato di default il test non riuscito. Cioè, voglio correre:CMake: impostazione di una variabile ambientale per ctest (o altrimenti ottenimento dell'output di test fallito da ctest/make test automaticamente)

$ make all test 

e vedere qualsiasi uscita di test falliti senza dover cat Testing/Temporary/LastTest.log.

Sembra che ci sono due modi per farlo:

(1) Impostazione della CTEST_OUTPUT_ON_FAILURE variabile d'ambiente:

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

(2) Specificare la bandiera --output-on-failure al ctest invocazione:

$ ctest --output-on-failure 

C'è un modo per scrivere un file CMakeLists.txt tale che i test di ctests falliscono l'output di defaul t su una normale chiamata "make all test" SENZA ricorrere all'esportazione della variabile ambientale a livello globale nella sessione o ricorrere a un target personalizzato come make check (come descritto here)?

Sono consapevole del comando SET_TESTS_PROPERTIES(), ma cercare fuori in questo modo:

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

e sperimentare spettacoli che la variabile ambientale si trova nel guscio che il programma di test viene eseguito in, ma non nel Shell CTest viene eseguito in

risposta

22

il built-in test di destinazione non può essere modificato, ma è possibile aggiungere un check obiettivo personalizzato che invoca ctest con l'interruttore --output-on-failure nel modo seguente:.

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

La destinazione personalizzata deve essere impostata in modo diverso per i tipi di build singoli e di configurazione multipla. In quest'ultimo caso, la configurazione di build attiva deve essere passata alla chiamata ctest utilizzando il flag --build-config. Lo --force-new-ctest-process viene utilizzato dall'obiettivo test integrato per impostazione predefinita.

+0

Grazie. Ricetta utile! – Jeet

+0

Grazie mille, esattamente quello che stavo cercando! Qualche idea sul perché non sia possibile modificare l'obiettivo 'test'? – lfxgroove

+0

Il target 'test' è uno degli obiettivi predefiniti globali di CMake che non possono essere modificati. La configurazione del comando 'test' in hardcoded nella sorgente di CMake. – sakra

Problemi correlati