Je ne le demande pas seulement pour moi. J’espère que cette question sera une référence pour les nombreux débutants qui, comme moi, ont trouvé cela complètement perplexe quant à ce qui se passait exactement dans les coulisses d’un si petit fichier CMakeLists.txt
.
cmake_minimum_required (VERSION 2.6) project(Tutorial) add_executable(Tutorial tutorial.cpp)
et un petit tutorial.cpp
int main() { return 0; }
il y a tellement de fichiers générés
CMakeCache.txt cmake_install.cmake Makefile CMakeLists.txt tutorial.cpp
et un dossier CMakeFiles
avec autant de fichiers et de dossiers
CMakeCComstackr.cmake CMakeOutput.log Makefile.cmake cmake.check_cache CMakeSystem.cmake progress.marks CMakeCXXComstackr.cmake CMakeTmp TargetDirectories.txt CMakeDetermineComstackrABI_C.bin ComstackrIdC Tutorial.dir CMakeDetermineComstackrABI_CXX.bin ComstackrIdCXX CMakeDirectoryInformation.cmake Makefile2
Ne pas comprendre ce qui se passait en coulisse (c.-à-d. Pourquoi des fichiers devaient être générés et quel était leur but) était le principal obstacle à l’apprentissage de CMake.
Si quelqu’un le sait, pourriez-vous, s’il vous plait, l’expliquer pour la postérité? Quel est le but de ces fichiers, et quand je tape cmake .
, qu’est-ce que la configuration et la génération de cmake avant de construire le projet?
Le secret est que vous n’avez pas à comprendre ce que font les fichiers générés.
CMake introduit une grande complexité dans le système de construction, dont la plupart ne rapportent que si vous l’utilisez pour créer des projets logiciels complexes.
Les bonnes nouvelles sont que CMake fait un bon travail pour garder beaucoup de ce désordre loin de vous: Utilisez des versions hors source et vous n’avez même pas à regarder les fichiers générés. Si vous ne l’avez pas fait jusqu’ici (ce qui est probablement le cas, puisque vous avez écrit cmake .
), Veuillez les vérifier avant de continuer . Mélanger le répertoire de construction et le répertoire source est vraiment pénible avec CMake et ce n’est pas la manière dont le système est censé être utilisé.
En un mot: au lieu de
cd cmake .
toujours utiliser
cd cmake
au lieu. J’utilise généralement un sous-dossier vide dans mon répertoire source en tant que répertoire de construction.
Pour soulager votre douleur, permettez-moi de donner un bref aperçu des fichiers pertinents générés par CMake:
ccmake
ou de cmake-gui
. Cela peut être utile à regarder de temps en temps, mais je vous recommande d’utiliser les outils susmentionnés pour modifier les valeurs si possible. CMakeFiles
. En général, vous ne devriez pas jouer avec les fichiers générés par CMake pour vous. Tous les problèmes peuvent être résolus dans CMakeLists.txt
d’une manière ou d’une autre. Tant que le résultat construit votre projet comme prévu, vous allez probablement bien. Ne vous inquiétez pas trop des détails sanglants – car c’est ce que CMake essayait de vous épargner en premier lieu.
Comme indiqué sur son site internet:
Cmake est un système de génération multi-plateforme et open-source pour gérer le processus de génération de logiciels en utilisant une méthode indépendante du compilateur
Dans la plupart des cas, il est utilisé pour générer des fichiers de projet / make – dans votre exemple, il a créé Makefile
qui est utilisé pour construire votre logiciel (principalement sous Linux / Unix).
Cmake permet de fournir des fichiers de construction multi-plateformes qui généreraient des fichiers de projet / make spécifiques à la plateforme pour un compilateur / une plate-forme spécifique.
Par exemple, vous pouvez essayer de comstackr votre logiciel sous Windows avec Visual Studio, puis avec la syntaxe appropriée dans votre fichier CMakeLists.txt
, vous pouvez lancer
cmake .
dans le répertoire de votre projet sur la plate-forme Windows et Cmake générera tous les fichiers de projet / solution nécessaires ( .sln
etc.).
Si vous souhaitez créer votre logiciel sur une plate-forme Linux / Unix, il vous suffit d’accéder au répertoire source où se trouve votre fichier CMakeLists.txt
et de déclencher le même cmake .
et il générera tous les fichiers nécessaires à la création de logiciels via sipmle make
ou make all
.
Ici, vous avez une très bonne présentation sur les fonctionnalités clés de Cmake http://www.elpauer.org/stuff/learning_cmake.pdf
MODIFIER
Si vous souhaitez que la bibliothèque dépend de la plate-forme inclue des définitions / variables, vous pouvez utiliser cette syntaxe dans le fichier CMakeLists.txt
IF(WIN32) ...do something... ELSE(WIN32) ...do something else... ENDIF(WIN32)
Il y a aussi beaucoup de commandes avec lesquelles vous pouvez empêcher la construction d’échouer et Cmake vous informera que par exemple vous n’avez pas installé les bibliothèques de filesystem
et le regex
sur votre système. Pour ce faire, vous pouvez utiliser la syntaxe suivante:
find_package(Boost 1.45.0 COMPONENTS filesystem regex)
Après avoir vérifié qu’il générera les fichiers Make pour le système / IDE / compilateur approprié.