Qu'est-ce que CMake ?

CMake est un outil de génération de systèmes de build multiplateforme. Il ne compile pas directement le code ; il génère des fichiers de build (Makefile, Ninja, Visual Studio) à partir d'un fichier CMakeLists.txt. Il est le standard de facto des projets C et C++ open-source.

Quelle est la différence entre CMake et Make ?

Make lit un Makefile et exécute des règles de compilation. CMake génère ce Makefile automatiquement. CMake est un méta-build system : il abstrait le système sous-jacent et permet de cibler Linux (Makefile), Windows (MSBuild) et macOS (Xcode) avec le même CMakeLists.txt.

Comment structurer un projet C avec CMake ?

Structure standard : répertoire racine avec CMakeLists.txt, dossier src/ pour les sources, include/ pour les en-têtes.

Commandes clés : cmake_minimum_required(), project(), add_executable() ou add_library(). Pour les tests : enable_testing() et add_test().

Comment ajouter une bibliothèque avec CMake ?

Avec CMake 3.x :

add_library(monlib STATIC src/monlib.c)
target_include_directories(monlib PUBLIC include/)
target_link_libraries(mon_exe PRIVATE monlib)

CMake gère automatiquement les dépendances de compilation.

Comment lancer les tests unitaires avec CMake ?

Ajoutez enable_testing() dans CMakeLists.txt, puis add_test(NAME mon_test COMMAND mon_exe).

Après cmake --build ., lancez ctest dans le répertoire de build. Options : ctest -R pattern (filtre) et ctest -V (verbeux).

Qu'est-ce qu'une target CMake moderne ?

Une target CMake est une unité de build auto-descriptive. Les trois commandes clés :

  • target_include_directories(lib PUBLIC include/) — expose les headers
  • target_compile_options(lib PRIVATE -Wall -Wextra) — options de compilation
  • target_link_libraries(exe PRIVATE lib) — lie et hérite les dépendances