CTest avec plusieurs commandes
Question
Je construis des tests en utilisant CTest. En général, je peux mettre en place le test simplement la ligne:
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, est-il possible que je peux exécuter deux programmes dans un seul ctest, ou suis-je obligé de créer un nouveau test pour chacun?
Merci.
La solution
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, d'une manière multi-plateforme, écrire 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 à 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>
s'étendu au 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 exécutera alors vos 2 programmes en séquence. Si l'un des programmes de test échoue, l'ensemble test échoue. Si vous avez besoin de voir la sortie du test, vous pouvez exécuter make test ARGS=-V