projtec:cmake
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
projtec:cmake [2017/11/21 13:19] – [Tests Unitaires] orel | projtec:cmake [2021/01/13 08:37] – [Tests Dynamiques] orel | ||
---|---|---|---|
Line 150: | Line 150: | ||
</ | </ | ||
- | ==== 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 169: | ||
</ | </ | ||
- | 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 186: | ||
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 la formule... | + | 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 / | ||
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" | + | include(CTest) |
- | if(ENABLE_DEBUG) | + | enable_testing() |
- | set(CMAKE_C_FLAGS " | + | |
- | set(CMAKE_LD_FLAGS " | + | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c99 -g --coverage" |
- | else() | + | |
- | set(CMAKE_C_FLAGS " | + | |
- | endif() | + | |
add_executable(foo foo.c) | add_executable(foo foo.c) | ||
- | # INCLUDE(CTest) | + | add_test(test1 ./foo 2) |
+ | add_test(test2 ./foo 5) | ||
+ | </ | ||
+ | |||
+ | cmake . | ||
+ | make ExperimentalTest | ||
+ | make ExperimentalCoverage | ||
+ | more Testing/ | ||
+ | |||
+ | Il est plus élégant de n' | ||
+ | |||
+ | <code text tests/ | ||
+ | cmake_minimum_required(VERSION 3.0) | ||
+ | |||
+ | include(CTest) | ||
enable_testing() | enable_testing() | ||
+ | |||
+ | set(CMAKE_C_FLAGS " | ||
+ | set(CMAKE_C_FLAGS_DEBUG " | ||
+ | |||
+ | add_executable(foo foo.c) | ||
add_test(test1 ./foo 2) | add_test(test1 ./foo 2) | ||
Line 214: | Line 236: | ||
</ | </ | ||
- | | + | |
- | make test | + | Il faut alors compiler le code en mode DEBUG (et non pas en mode RELEASE) : |
+ | |||
+ | | ||
+ | make ExperimentalTest | ||
make ExperimentalCoverage | make ExperimentalCoverage | ||
more Testing/ | more Testing/ | ||
- | + | ||
- | __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