web-dev-qa-db-fra.com

Que fait cmake ..?

J'ai obtenu la source du projet Box2D et je veux en compiler la partie banc d'essai. Le dossier du projet contient des dossiers comme: banc d'essai gratuit de glui (une démo) helloword (une démo) Box2D Build CMakeFiles

Il existe de nombreux CMakeLists.txt dans tous les différents dossiers. Je pensais que je devrais créer tous ces fichiers afin que les fichiers de création soient créés à tous les endroits requis. J'ai lu ceci (car les instructions à faire ne veulent que je veux):

wget http://box2d.googlecode.com/files/Box2D_v2.2.1.Zip
unzip Box2D_v2.2.1.Zip
cd Box2D_v2.2.1/Build
cmake ..
make

Que fait le cmake ..? Il n'y a pas de CMakeLists.txt dans le dossier de génération.

30
batman

cmake est un générateur Makefile.

Quand vous appelez cmake [path], vous lui demandez de générer un Makefile dans le répertoire courant en suivant les instructions données dans [path]/CMakeLists.txt

Habituellement, cmake affiche certains messages pendant qu'il fonctionne, et après cela sans erreur, vous pouvez taper "make" pour exécuter votre Makefile nouvellement créé.

Les fichiers CMakeLists.txt peuvent référencer d'autres fichiers CMakeLists.txt dans le sous- répertoires, donc vous n'êtes généralement intéressé que par le CMakeLists.txt du répertoire top, pas les autres.

L'utilisation d'un répertoire "build" vide est une technique appelée "build out-of-source", dans laquelle tous vos fichiers générés (.o, exécutable, Makefile, .anything) sont générés dans le répertoire "build" séparé et non mélangés avec fichiers source. Si vous souhaitez tout nettoyer, vous pouvez supprimer tout le contenu du répertoire de génération.

En fait, vous pouvez placer votre répertoire "build" à n'importe quel endroit, tant que vous donnez à cmake le chemin correct du CMakeLists.txt supérieur. Vous pouvez même avoir plusieurs répertoires de construction. C'est très utile si vous avez besoin de plusieurs builds différents en même temps (avec différentes options, différentes versions de gcc, etc.)

Dans les anciens programmes, vous générez également le Makefile, mais en utilisant ./configure (cela s'appelle des outils automatiques. Vous l'avez peut-être déjà rencontré). cmake est considéré comme un successeur des outils automatiques.

45
Offirmo

cmake .. génère des makefiles dans le répertoire courant, en utilisant ../CMakeLists.txt fichier comme point de départ. make commande, exécutée après cela, construit le programme, en utilisant le (s) makefile (s) généré (s) en entrée. Ceci est pratique pour conserver un code source et générer des résultats dans différents dossiers. La syntaxe générale est: cmake source-dir (bien sûr, il y a beaucoup d'autres commutateurs).

6
Alex F

Bien, .. est un raccourci pour le dossier parent, il agira donc probablement sur tout ce qu'il trouvera dans Box2D_v2.2.1.

3
Rook