2010-06-17 7 views
11

Je construis des tests en utilisant CTest. En général, je peux mettre en place le test simplement la ligne:CTest avec plusieurs commandes

ADD_TEST(Test_Name executable args) 

Cependant, j'ai rencontré un problème, j'ai quelques tests qui nécessitent deux commandes à exécuter pour que cela fonctionne, il est D'une manière ou d'une autre, je peux exécuter deux programmes au sein d'un seul test, ou dois-je créer un nouveau test pour chacun?

Merci.

Répondre

14

La commande add_test accepte un seul exécutable, mais vous pouvez exécuter un exécutable qui est vraiment un script. Pour ce faire de manière multi-plateforme, écrivez le script dans CMake lui-même. CMake a l'option -P pour exécuter des parties arbitraires de langage de script CMake lorsque vous exécutez make ou make test, plutôt qu'au moment de la génération Makefile.

Malheureusement vous ne pouvez pas passer des arguments à un tel script. Mais vous pouvez définir des variables sur des valeurs, ce qui est tout aussi bon.

Ce script vous pouvez appeler runtests.cmake, il exécute les commandes cmd1 et CMD2 et vérifie chaque pour un code de retour non nul, retour sur CMake lui-même avec une erreur si cela se produit:

macro(EXEC_CHECK CMD) 
    execute_process(COMMAND ${CMD} RESULT_VARIABLE CMD_RESULT) 
    if(CMD_RESULT) 
     message(FATAL_ERROR "Error running ${CMD}") 
    endif() 
endmacro() 
exec_check(${CMD1}) 
exec_check(${CMD2}) 

.. . puis ajouter vos cas de test comme ceci:

add_executable(test1 test1.c) 
add_executable(test2 test2.c) 
add_test(NAME test 
    COMMAND ${CMAKE_COMMAND} 
      -DCMD1=$<TARGET_FILE:test1> 
      -DCMD2=$<TARGET_FILE:test2> 
    -P ${CMAKE_CURRENT_SOURCE_DIR}/runtests.cmake) 

$<TARGET_FILE:test1> obtient d'après le contenu chemin complet vers l'exécutable lors de la génération build fichier. Lorsque vous exécutez make test ou équivalent ce courra « cmake -P runtests.cmake » définissant les variables cmd1 et CMD2 aux programmes de test appropriés. Le script va ensuite exécuter vos 2 programmes en séquence. Si l'un des programmes de test échoue, l'ensemble du test échoue. Si vous avez besoin de voir la sortie du test, vous pouvez exécuter make test ARGS=-V

+0

Hmm ... ça me va, même si j'ai besoin que le script soit exécuté pendant le temps de test, pas le temps de génération ou le temps de génération du fichier makefile. –

+0

Oh, par "temps de construction" je voulais dire quand vous exécutez une commande 'make', y compris' make test'. Par opposition à quand vous exécutez 'cmake' pour générer les Makefiles. J'ai clarifié cela dans la réponse maintenant. – richq

Questions connexes