2017-09-27 12 views
0

J'essaie de créer un projet CMake où je veux exécuter des tests en fonction du type de construction. E.g. si je fais un build de performance, je veux exécuter des tests de performance, etc.ctest n'appelle pas de tests spécifiques au type de construction

J'ai trouvé que add_test fournit le paramètre CONFIGURATIONS à cette fin. Cependant, si je fournis un type de construction, ctest ne trouve aucun test. Voici un CMakeLists.txt reproduisant le comportement.

project (test NONE) 
include (CTest) 

add_test (NAME test 
    CONFIGURATIONS Release 
  COMMAND cowsay) 

En shell:

mkdir build 
cd build 
cmake -DCMAKE_BUILD_TYPE=Release ..  
cmake --build . 
ctest 

Sortie:

Running tests...  
Test project /home/phil/cmaketest/build  
No tests were found!!! 

Si je lance

ctest -C Release 

-je obtenir le comportement souhaité, à savoir le test est exécuté, mais je ne préférerai pas avoir à taper le -C Release à la main.

Est-ce que je fais quelque chose de mal ici ou est ce comportement en retrait?

Répondre

1

Le add_test (... CONFIGURATIONS ...) est exactement dans le but d'exécuter plus tard des tests pour une configuration spécifique avec ctest -C ....

Alors oui, c'est prévu. Le raisonnement est que cela prend en charge les environnements de construction mono-configuration et multi-configuration de la même manière.

Si vous voulez soutenir uniquement les environnements mono-configuration que vous pouvez faire:

if (CMAKE_BUILD_TYPE MATCHES "Release") 
    add_test (
     NAME test 
     COMMAND cowsay 
    ) 
endif() 
+0

La chose étrange est que les différents tests ont besoin de différents indicateurs de compilation/lien à l'étape de construction, mais je peux faire quelque chose comme faire une version build avec 'cmake -DCMAKE_BUILD_TYPE = Release ..; cmake --build .' puis lancez un test de couverture de code avec 'ctest -C Coverage'. Mais cela devrait clairement être refusé. Mais avec ma configuration actuelle, cela donne des résultats sans signification. – user26756