Cmake

Pour produire une suite logiciele en langage C ou C++ qui suppose la compilation de nombreux fichiers sources, la liaison de librairies tierces statiques ou dynamiques, la production d’un ou plusieurs exécutable, librairies statiques ou partagées, selon la suite de compilation qu’on utilise le format qui décrit la génération de la solution diffère : Un simple makefile si on utilise un compilateur Open source tel que GCC ou clang. Les plus pressés pourront utiliser Ninja.

Si on utilise le compilateur de MSVC de Microsoft, dans ce cas on aura besoin d’un fichier .sln ou bien d’un Nmakefile.

Si on compile sous MacOS, dans ce cas on utilisera XCode et le compilateur AppleClang. Le fichier qui décrit la solution sera dans le format .xcodeproj.

Si on veut compiler notre solution avec ces trois compilateurs pour Windows, Linux et Mac on devrit en théorie maintenir un fichier .sln, un Makefile et un .xcodeproj. Sachant que le format .sln évolue à chaque nouvelle version de Visual Studio, et de même pour le format de Xcode. De même il existe de nombreux dialectes de Makefiles et un makefile en soi est constitué de commandes shell et d’appels à des programmes et utilitaires qui peuvent varier selon le système d’exploitation, la distribution Linux, le compilateur utilisé, la version du compilateur, et ainsi de suite.

Cmake est capable de générer pour nous des makefiles, des projets Visual Studio ou Xcode à la demande, à partir d’un fichier CmakeLists.txt

D’autre solutions similaires ayant la même utilité que cmake existent : autotools, meson, MSBuild, scons, bazel, xmake…

Cmake s’est toutefois imposé comme standart de-facto aujourd’hui.

Les dásavantages de Cmake est qu’il ne donne pas autant de contrôle qu’une solution .sln ou makefile natif. Il est surement recommandé d’être familier avec ces derniers et d’être capable de comprendre les fichiers généres par Cmake.

Procédure

On utilise généralement cmake en ligne de commande, après l’avoir installé, on devrait pouvoir tapper cmake dans un terminal et avoir une message expliquant les options acceptées par la commande.

On commence par creer un dossier où l’on veut construire le projet, il peut être un sous dossier du projet ou être complètement séparé de celui-ci.

cd <le chemin du dossier où se trouve votre CMakeLists.txt>
mkdir _build
pushd _build
cmake ..

Un message d’erreur dit CMake Error: The source directory "/<chemin vers votre projet>" does not appear to contain CMakeLists.txt.

Types de build

Par defaut Cmake proposer 5 types de préréglages pour générer une solution :

Affichage verbeux

Cmake cache par défaut les commandes invoquées par le compilateur et le linker, ce qui peut rendre le debogage difficile.

Pour les afficher, il faut modifier la propriété CMAKE_VERBOSE_MAKEFILE dans le fichier CMakeCache.txt à TRUE.

Alternativement en ligne de commande cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .. depuis le dossier de build.

A noter que contrairement à ce que son nom implique la verbosité augmente egalement pour les projets Visual Studio de type .sln.

Ressources

Une bonne explication sur la difference entre PUBLIC, PRIVATE et INTERFACE https://www.youtube.com/watch?v=8l53O3FaJdM 🌍⤴

Additional resources

  • Gérer un large projet cmake 🌍⤴