CMake & CTest : faire le test de ne pas construire des tests
Je suis en train CTest dans CMake pour exécuter automatiquement certains de mes tests à l'aide de make test
cible. Le problème est CMake ne pas "comprendre" que le test, je suis prêt à exécuter doit être construit car il est une partie du projet.
Donc je suis à la recherche d'un moyen de spécifier explicitement cette dépendance.
Vous devez vous connecter pour publier un commentaire.
Il est sans doute un bug dans CMake (auparavant suivre ici) que cela ne fonctionne pas hors de la boîte. Une solution de contournement consiste à effectuer les opérations suivantes:
Ensuite, vous pouvez exécuter
make check
et compiler et exécuter le test. Si vous avez plusieurs tests, alors que vous auriez à utiliserDEPENDS exe1 exe2 exe3 ...
dans la ligne ci-dessus.check
cible et ils peuvent entrer en collisiontest/test_myapp
la CUnit les tests s'exécutent correctement. WTH?Il est en fait un moyen d'utiliser
make test
. Vous devez définir la version de test exécutables comme l'un des tests, puis ajouter les dépendances entre les tests. Qui est:J'utilise une variante de richq de réponse. Dans le haut-niveau
CMakeLists.txt
, j'ai ajouter une cible personnalisée,build_and_test
, pour la construction et l'exécution de tous les tests:Dans les différentes sous-projet
CMakeLists.txt
fichiers soustest/
, j'ajoute chaque test exécutable en tant que dépendance debuild_and_test
:Avec cette approche, j'ai juste besoin de
make build_and_test
au lieu demake test
(oumake all test
), et il a l'avantage de seul bâtiment le code de test (et ses dépendances). C'est une honte je ne peux pas utiliser le nom de la cibletest
. Dans mon cas, c'est pas si mal parce que j'ai un script de niveau supérieur qui n'hors de l'arbre de debug et release (et cross-compilé), construit en appelantcmake
et puismake
, et il traduittest
enbuild_and_test
.Évidemment, la GTest choses n'est pas nécessaire. Je viens de passer à utiliser/comme Google Test, et je voulais partager un exemple complet de l'utiliser avec CMake/CTest. À mon humble avis, cette approche a aussi l'avantage de me permettre d'utiliser
ctest -V
, ce qui montre le Google Test de sortie, tandis que l'exécution des tests:Si vous êtes en essayant d'imiter
make check
, vous pouvez trouver cette entrée wiki utile :http://www.cmake.org/Wiki/CMakeEmulateMakeCheck
J'ai juste vérifié que ce qu'il dit avec succès (CMake 2.8.10).
make check
. Pour les tests avec de dominer les temps de compilation, ce qui rendctest -R
inutile.Vous épargner les maux de tête:
Fonctionne hors de la boîte pour moi et les dépendances de construction avant d'exécuter le test. Compte tenu de la façon simple, c'est que ça rend le natif
make test
fonctionnalité très pratique car il vous donne la possibilité de l'exécution de la dernière compilation de tests, même si votre code est cassé.make -j4 all && make test
. Et c'est aussi feuilletée à l'aide d'un non-Faire construire l'outil.C'est ce que j'ai martelé et ont été à l'aide de:
YMMV
Si vous êtes en utilisant CMake >= 3.7, puis l'approche recommandée consiste à utiliser luminaires:
Toutes les réponses ci-dessus sont parfaits. Mais en réalité, CMake utilisation CTest que ses outils de test, de sorte que la méthode standard (je pense que c'est) pour faire la mission est:
Puis exécutez cmake et faire pour construire les objectifs. Après cela, vous pouvez soit exécuter faire des test, ou tout simplement courir
vous obtiendrez le résultat. C'est testé sous CMake 2.8 .
Vérifier les détails au: http://cmake.org/Wiki/CMake/Testing_With_CTest#Simple_Testing
enable_testing()
,add_test()
, etc. Le problème, c'est qu'il a manuellement le numéro de la commande build avant l'exécution des tests. Il veut lamake test
cible pour construire automatiquement le test exécutables comme nécessaire.Toutes les réponses sont bonnes, mais elles impliquent une violation de la tradition pour l'exécution d'un test par la commande
make test
. J'ai fait ce truc:Cela signifie que le test se compose de la construction (en option) et l'exécution de l'exécutable cible.
make
et perd CMake la fonction de génération de scripts pour d'autres outils de construction.