3 votes

cmake/ctest : est-il possible d'utiliser la création de cibles de construction comme tests ?

J'ai un programme qui lit une description d'un format de fichier (ISO 10303-11 pour les curieux) et génère du c++ à partir de celle-ci. Le code généré est compilé dans une bibliothèque, et la bibliothèque est liée à divers exécutables pour lire/écrire ce format de fichier.

J'ai configuré CMake pour construire le programme générateur et générer des bibliothèques pour tous les formats de fichiers spécifiés au moment de la configuration.

Maintenant, je veux ajouter des tests. Ces tests sont identiques aux étapes qui sont déjà effectuées dans le processus de construction - dois-je refaire ces étapes dans un CTest script, ou y a-t-il un moyen de dire à ctest de construire une cible et de capturer tout message d'erreur ?

3voto

DLRdave Points 4757

Si vous utilisez une version assez récente de ctest (la version officielle la plus récente est 2.8.6), vous pouvez utiliser la signature NAME/COMMAND de add_test, en conjonction avec l'option de ligne de commande cmake --build, pour construire des cibles spécifiques dans votre arbre de construction.

Par exemple, ce qui suit devrait fonctionner, en supposant une cible personnalisée (ou une bibliothèque ou une cible exécutable) nommée "tgt1" :

add_test(NAME test.build.tgt1
  WORKING_DIRECTORY ${CMAKE_BINARY_DIRECTORY}
  COMMAND ${CMAKE_COMMAND} --build . --target tgt1 --config $<CONFIGURATION>
)

Cela fonctionne sur toutes les plates-formes avec la même syntaxe partout. Il fonctionne même avec les générateurs multi-configuration, comme Visual Studio et Xcode.

0voto

John Zwinck Points 43636

Avez-vous essayé de dire enable_testing() dans votre CMakeLists.txt puis en appelant add_test() pour faire une cible de test ? Je pense que vous pouvez tout faire en un seul build consolidé script si vous suivez la documentation CMake.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X