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
projtec:cmake [2017/11/23 08:40] – [Tests Unitaires] orelprojtec:cmake [2024/03/18 15:06] (current) – external edit 127.0.0.1
Line 41: Line 41:
      
 Un des avantages de cette méthode est quelle permet de ne pas mélanger les fichiers générés par CMake et Make avec les fichiers sources. Du coup, il suffit de supprimer le répertoire //build// pour tout nettoyer. Un des avantages de cette méthode est quelle permet de ne pas mélanger les fichiers générés par CMake et Make avec les fichiers sources. Du coup, il suffit de supprimer le répertoire //build// pour tout nettoyer.
 +
 ==== Un peu plus compliqué ==== ==== Un peu plus compliqué ====
  
Line 191: Line 192:
   make test   make test
  
 +==== Fuites Mémoire ====
  
 Pour aller un peu plus loin, on peut lancer des tests de varification de la mémoire (memcheck) : Pour aller un peu plus loin, on peut lancer des tests de varification de la mémoire (memcheck) :
Line 196: Line 198:
   make ExperimentalMemCheck   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.+Ces tests se base sur la variable 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. 
 + 
 +Les logs sont disponibles dans : Testing/Temporary/MemoryChecker.*.log 
 + 
 +Il est possible d'ajouter les options suivantes pour obtenir des logs encore plus détaillés... 
 + 
 +  find_program(MEMORYCHECK_COMMAND valgrind) 
 +  set(MEMORYCHECK_COMMAND_OPTIONS "--leak-check=full" CACHE STRING "" FORCE) 
 + 
 + 
 +==== Couverture de Code ====
  
 Pour aller encore plus loin... Pour aller encore plus loin...
Line 203: Line 215:
 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)
 +
 +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) 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 220: Line 248:
 </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.1511426440.txt.gz · Last modified: 2024/03/18 15:05 (external edit)