projtec:cmake
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
projtec:cmake [2017/02/16 15:02] – orel | projtec: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 150: | Line 151: | ||
</ | </ | ||
- | ==== Tests Unitaires | + | ==== Tests Dynamiques |
On ajoute à notre projet un sous-répertoire //tests// pour vérifier les fonctions de //mylib// ({{projtec: | On ajoute à notre projet un sous-répertoire //tests// pour vérifier les fonctions de //mylib// ({{projtec: | ||
Line 169: | Line 170: | ||
</ | </ | ||
- | 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' | + | 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 |
<code text tests/ | <code text tests/ | ||
+ | include(CTest) | ||
enable_testing() | enable_testing() | ||
Line 185: | Line 187: | ||
set_tests_properties(test2 PROPERTIES PASS_REGULAR_EXPRESSION " | set_tests_properties(test2 PROPERTIES PASS_REGULAR_EXPRESSION " | ||
- | add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) | ||
</ | </ | ||
- | Bah vous connaissez | + | Pour lancer les tests : |
+ | make test | ||
+ | |||
+ | ==== Fuites Mémoire ==== | ||
+ | |||
+ | 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 variable MEMORYCHECK_COMMAND qui est par défault sur / | ||
+ | |||
+ | Les logs sont disponibles dans : Testing/ | ||
+ | |||
+ | Il est possible d' | ||
+ | |||
+ | find_program(MEMORYCHECK_COMMAND valgrind) | ||
+ | set(MEMORYCHECK_COMMAND_OPTIONS " | ||
+ | |||
+ | |||
+ | ==== Couverture de Code ==== | ||
+ | |||
+ | Pour aller encore plus loin... | ||
+ | |||
+ | <code text tests/ | ||
+ | cmake_minimum_required(VERSION 3.0) | ||
+ | |||
+ | include(CTest) | ||
+ | enable_testing() | ||
+ | |||
+ | set(CMAKE_C_FLAGS " | ||
+ | |||
+ | add_executable(foo foo.c) | ||
+ | |||
+ | add_test(test1 ./foo 2) | ||
+ | add_test(test2 ./foo 5) | ||
+ | </ | ||
+ | |||
+ | cmake . | ||
+ | make ExperimentalTest # ou make test | ||
+ | make ExperimentalCoverage | ||
+ | more Testing/ | ||
+ | |||
+ | Il est plus élégant de n' | ||
+ | |||
+ | <code text tests/ | ||
+ | cmake_minimum_required(VERSION 3.0) | ||
+ | |||
+ | include(CTest) | ||
+ | enable_testing() | ||
+ | |||
+ | set(CMAKE_C_FLAGS " | ||
+ | set(CMAKE_C_FLAGS_DEBUG " | ||
+ | |||
+ | add_executable(foo foo.c) | ||
+ | |||
+ | add_test(test1 ./foo 2) | ||
+ | add_test(test2 ./foo 5) | ||
+ | </ | ||
- | make check | + | Il faut alors compiler le code en mode DEBUG (et non pas en mode RELEASE) : |
+ | cmake -DCMAKE_BUILD_TYPE=DEBUG . | ||
+ | make ExperimentalTest | ||
+ | make ExperimentalCoverage | ||
+ | more Testing/ | ||
projtec/cmake.1487257328.txt.gz · Last modified: 2024/03/18 15:05 (external edit)