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/01/30 12:59] – orel | projtec:cmake [2017/11/23 08:40] – [Tests Unitaires] orel | ||
---|---|---|---|
Line 1: | Line 1: | ||
======CMake ====== | ======CMake ====== | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
==== Hello World ==== | ==== Hello World ==== | ||
Line 18: | Line 22: | ||
<code text CMakeLists.txt> | <code text CMakeLists.txt> | ||
cmake_minimum_required(VERSION 2.6) | cmake_minimum_required(VERSION 2.6) | ||
- | project(HelloWorld) | + | project(HelloWorld |
add_executable(hello hello.c) | add_executable(hello hello.c) | ||
</ | </ | ||
Line 35: | Line 39: | ||
cmake .. | cmake .. | ||
make | make | ||
+ | | ||
+ | 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 69: | Line 75: | ||
cmake_minimum_required (VERSION 2.6) | cmake_minimum_required (VERSION 2.6) | ||
project (HelloWorld C) | project (HelloWorld C) | ||
+ | |||
+ | set(CMAKE_BUILD_TYPE DEBUG) | ||
+ | set(CMAKE_VERBOSE_MAKEFILE ON) | ||
+ | set(CMAKE_C_COMPILER gcc) | ||
set(CMAKE_C_FLAGS " | set(CMAKE_C_FLAGS " | ||
set(CMAKE_INSTALL_PREFIX " | set(CMAKE_INSTALL_PREFIX " | ||
+ | |||
add_executable(hello hello.c pouet.c) | add_executable(hello hello.c pouet.c) | ||
target_link_libraries(hello m) | target_link_libraries(hello m) | ||
Line 139: | 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 158: | Line 169: | ||
</ | </ | ||
- | Voici le fichier //CMake// pour compiler et exécuter les tests... | + | Voici le fichier //CMake// pour compiler et exécuter les tests. |
<code text tests/ | <code text tests/ | ||
+ | include(CTest) | ||
enable_testing() | enable_testing() | ||
Line 170: | Line 182: | ||
add_test(test1 test-mylib-foo) | add_test(test1 test-mylib-foo) | ||
- | set_tests_properties(test1 PROPERTIES TIMEOUT 3) | + | set_tests_properties(test1 PROPERTIES PASS_REGULAR_EXPRESSION " |
- | set_tests_properties(test1 PROPERTIES PASS_REGULAR_EXPRESSION " | + | |
add_test(test2 test-mylib-bar) | add_test(test2 test-mylib-bar) | ||
- | set_tests_properties(test2 PROPERTIES TIMEOUT 3) | + | 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 check | ||
+ | Pour aller un peu plus loin, on peut lancer des tests de varification de la mémoire (memcheck) : | ||
- | ==== Biblio ==== | + | make ExperimentalMemCheck |
+ | |||
+ | Ces tests se base sur la varaible MEMORYCHECK_COMMAND qui est par défault sur / | ||
- | * https:// | + | Pour aller encore plus loin... |
- | * https:// | + | |
- | * https:// | + | |
+ | <code text tests/ | ||
+ | cmake_minimum_required(VERSION 3.0) | ||
+ | |||
+ | option(ENABLE_DEBUG "debug options" | ||
+ | if(ENABLE_DEBUG) | ||
+ | set(CMAKE_C_FLAGS " | ||
+ | set(CMAKE_LD_FLAGS " | ||
+ | else() | ||
+ | set(CMAKE_C_FLAGS " | ||
+ | endif() | ||
+ | |||
+ | add_executable(foo foo.c) | ||
+ | |||
+ | include(CTest) | ||
+ | enable_testing() | ||
+ | |||
+ | add_test(test1 ./foo 2) | ||
+ | add_test(test2 ./foo 5) | ||
+ | </ | ||
+ | |||
+ | cmake . -DENABLE_DEBUG=ON | ||
+ | make test | ||
+ | make ExperimentalCoverage | ||
+ | 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