CMake: paramétrage d'une variable d'environnement pour le test ctest (ou obtention d'une sortie de test ratée du test ctest/make test automatiquement))

je veux que ctest me montre la sortie des tests par défaut. C'est-à-dire, je veux courir:

$ make all test

et voir tout résultat d'essais infructueux sans avoir à cat Testing/Temporary/LastTest.log .

il semble qu'il y ait deux façons de le faire:

(1) paramètre CTEST_OUTPUT_ON_FAILURE variable environnementale:

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

(2) spécifiant le drapeau --output-on-failure pour l'invocation ctest :

 $ ctest --output-on-failure

est-il une façon d'écrire une liste de Mac?le fichier txt est-il tel que le ctests vide la sortie des tests par défaut sur une invocation Normale "make all test" sans recourir à l'exportation de la variable environnementale globalement dans la session ou en recourant à une cible personnalisée comme make check (comme décrit ici )?

je suis au courant de la commande SET_TESTS_PROPERTIES() , mais l'essayer comme ceci:

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

et l'expérimentation montre que la variable d'environnement est définie dans la coquille que le programme de test est exécuté, mais pas dans le shell que ctest est exécutée.

35
demandé sur Community 2013-04-23 02:54:55

1 réponses

la cible intégrée test ne peut pas être modifiée, mais vous pouvez ajouter une cible personnalisée check qui invoque ctest avec le commutateur --output-on-failure de la manière suivante:

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 cible personnalisée doit être configurée différemment pour les constructions mono-type et multi-configurations. Dans ce dernier cas, la configuration de construction active doit être transmise à l'invocation ctest en utilisant le drapeau --build-config . Le --force-new-ctest-process est utilisé par la cible intégrée test par défaut.

23
répondu sakra 2013-04-23 07:12:06