User Tools

Site Tools


projtec:cmake

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
projtec:cmake [2017/11/21 13:19] – [Tests Unitaires] orelprojtec:cmake [2021/01/13 08:37] – [Tests Dynamiques] orel
Line 150: Line 150:
 </code> </code>
  
-==== Tests Unitaires ====+==== Tests Dynamiques ====
  
 On ajoute à notre projet un sous-répertoire //tests// pour vérifier les fonctions de //mylib// ({{projtec:cmake-v3.zip}}). On ajoute à notre projet un sous-répertoire //tests// pour vérifier les fonctions de //mylib// ({{projtec:cmake-v3.zip}}).
Line 169: Line 169:
 </code> </code>
  
-Voici le fichier //CMake// pour compiler et exécuter les tests. Par defaut, pour chaque test, CMake vérifie que le programme termine normalement (pas de signal SEGV par exemple ) et que la valeur de retour vaut EXIT_SUCCESS. On peut également rajouter d'autres propriétés à vérifier comme un //timeout// ou une vérification la sortie standard par une expression régulière.+Voici le fichier //CMake// pour compiler et exécuter les tests. Par defaut, pour chaque test, CMake vérifie que le programme termine normalement (pas de signal SEGV par exemple ) et que la valeur de retour vaut EXIT_SUCCESS (0). On peut également rajouter d'autres propriétés à vérifier comme un //timeout// ou encore vérifier la sortie standard par une expression régulière.
  
 <code text tests/CMakeLists.txt> <code text tests/CMakeLists.txt>
 +include(CTest)
 enable_testing() enable_testing()
  
Line 185: Line 186:
 set_tests_properties(test2 PROPERTIES PASS_REGULAR_EXPRESSION "foo" TIMEOUT 3) set_tests_properties(test2 PROPERTIES PASS_REGULAR_EXPRESSION "foo" TIMEOUT 3)
  
-# add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) 
 </code> </code>
  
-Bah vous connaissez la formule... Pour lancer les tests :  +Pour lancer les tests : 
   make test   make test
 +
 +
 +Pour aller un peu plus loin, on peut lancer des tests de varification de la mémoire (memcheck) :
 +
 +  make ExperimentalMemCheck
 +  
 +Ces tests se base sur la varaible MEMORYCHECK_COMMAND qui est par défault sur /sur/bin/valgrind (enfin s'il est installé...). Les résultats sont dans Testing/<DATE-HOUR>/DynamicAnalysis.xml.
  
 Pour aller encore plus loin... Pour aller encore plus loin...
Line 197: Line 203:
 cmake_minimum_required(VERSION 3.0) cmake_minimum_required(VERSION 3.0)
  
-option(ENABLE_DEBUG "debug options" ON+include(CTest
-if(ENABLE_DEBUG+enable_testing() 
-  set(CMAKE_C_FLAGS "-std=c99 -g -fprofile-arcs -ftest-coverage -Wall"+ 
-  set(CMAKE_LD_FLAGS "-fprofile-arcs -ftest-coverage"  +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c99 -g --coverage")
-else() +
-  set(CMAKE_C_FLAGS "-std=c99 -O3 -Wall"+
-endif()+
  
 add_executable(foo foo.c) add_executable(foo foo.c)
  
-INCLUDE(CTest)+add_test(test1 ./foo 2) 
 +add_test(test2 ./foo 5) 
 +</code> 
 + 
 +  cmake . 
 +  make ExperimentalTest ou make test 
 +  make ExperimentalCoverage 
 +  more Testing/CoverageInfo/
 + 
 +Il est plus élégant de n'activer le coverage que en mode DEBUG... 
 + 
 +<code text tests/CMakeLists.txt> 
 +cmake_minimum_required(VERSION 3.0) 
 + 
 +include(CTest)
 enable_testing() enable_testing()
 +
 +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
 +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall -g --coverage")
 +
 +add_executable(foo foo.c)
  
 add_test(test1 ./foo 2) add_test(test1 ./foo 2)
Line 214: Line 236:
 </code> </code>
  
-  cmake -DENABLE_DEBUG=ON  # ou bien utiliser ccmake + 
-  make test+Il faut alors compiler le code en mode DEBUG (et non pas en mode RELEASE) : 
 + 
 +  cmake -DCMAKE_BUILD_TYPE=DEBUG 
 +  make ExperimentalTest
   make ExperimentalCoverage   make ExperimentalCoverage
   more Testing/CoverageInfo/*   more Testing/CoverageInfo/*
-   +
-__Nota Bene__ : Est-ce la bonne façon de faire ? Ne fait-il pas mieux utiliser CMAKE_C_FLAGS_DEBUG avec CMAKE_BUILD_TYPE. +
-  +
projtec/cmake.txt · Last modified: 2024/03/18 15:06 by 127.0.0.1