2012-09-02 10 views
19

Ich habe die Box2D Projektquelle und möchte den Testbed Teil davon kompilieren. Der Projektordner enthält Ordner wie: freeglu glui Testbed (a demo) helloword (a demo) Box2D CMakeFiles BauenWas macht cmake .. tun?

Es gibt viele CMakeLists.txt in allen verschiedenen Ordnern. Ich dachte, dass ich alle diese Dateien cmake machen sollte, damit Dateien an allen erforderlichen Stellen erstellt werden. Ich lese diese (wie Anweisungen, die ich tun möchte, wollen):

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 

Was bedeutet die cmake .. tun? Es gibt keine CMakeLists.txt im Build-Ordner.

+0

Aber es sollte eine CMakeLists.txt Datei in "Box2D_v2.2.1" Ordner sein. In "cmake .." sagen doppelt gepunktete Markierungen, dass die CMakeLists.txt-Datei in einem Verzeichnis aufwärts in der Verzeichnishierarchie "Box2D_v2.2.1/Build /" existiert. –

Antwort

35

cmake ist ein Makefile-Generator.

Wenn Sie cmake [path] anrufen, fragen Sie es ein Makefile erzeugen in den aktuellen Verzeichnis folgenden Anweisungen in [path]/CMakeLists.txt

Normalerweise Cmake Ausgabe einige Nachrichten, während es funktioniert, und nachdem sie ohne Fehler durchgeführt wird , können Sie "make" eingeben, um das neu erstellte Makefile auszuführen.

CMakeLists.txt Dateien können andere CMakeLists.txt Datei in Unterverzeichnisse verweisen, so dass Sie sind in der Regel daran interessiert sind nur durch die CMakeLists.txt des oben Verzeichnis, nicht die anderen.

Mit einem leeren "Build" -Verzeichnis wird eine Technik namens "out-of-source build" erstellt, in der alle generierten Dateien (.o, executable, Makefile, .anything) im separaten "build" -Verzeichnis generiert werden und nicht mit Quelldateien gemischt. Wenn Sie alle löschen möchten, können Sie den gesamten Inhalt des Build-Verzeichnisses löschen.

In der Tat können Sie Ihr "Build" -Verzeichnis an einer beliebigen Stelle setzen, solange Sie Cmake den richtigen Pfad der oberen CMakeLists.txt geben. Sie können sogar mehrere Build-Verzeichnisse haben. Es ist sehr nützlich, wenn Sie mehrere verschiedene Builds gleichzeitig benötigen (mit verschiedenen Optionen, verschiedenen Versionen von gcc usw.)

In alten Programmen erzeugen Sie auch das Makefile, aber verwenden ./configure (dies wird als Vielleicht haben Sie das bereits bemerkt. cmake gilt als Nachfolger der Auto-Tools.

+0

Ah! Danke vielmals! Das löste meine Verwirrung. Ich hatte versucht, cmake in einer Datei laufen zu lassen, die CMakeLists.txt enthielt, indem ich "cmake" 'ohne' Dateispezifikation eintippte und ich dachte, ich hätte eine Manpage von CMake angezeigt. Vielleicht hatte ich es nicht richtig ausprobiert :) – batman

+0

Wenn ich das etwas weiter ausdehne, waren die eigentlichen Befehle anders als ich gedacht hatte. Es gab ein 'cmake -DBOX2D_INSTALL = ON -DBOX2D_BUILD_SHARED = ON '.. anstatt nur' cmake ..' Irgendwelche Ahnung was das bedeutet? – batman

+1

@learner ja. Wenn Sie dem cmake-Aufruf Optionen hinzufügen, geben Sie Hinweise dazu, wie das Makefile generiert werden soll, ob Sie einige Funktionen aktivieren oder einen anderen Modus verwenden möchten. In den meisten Fällen können Sie diese Optionen auch ändern, indem Sie "ccmake" eingeben. (Beachten Sie den Punkt) in Ihrem Build-Verzeichnis. Sie haben dann eine kleine Schnittstelle, die Makefile-Generierungsoptionen auflistet. – Offirmo

3

Nun, .. ist eine Abkürzung für den übergeordneten Ordner, so wird es vermutlich auf was auch immer es in Box2D_v2.2.1 findet handeln.

+0

@Alex Farber und Rook, als ich cmake im übergeordneten Ordner versuchte nichts passierte. Es gab eine Anleitung für eine Art von Cmake. Und ist es notwendig, in 1 Schritt tief zu gehen und das obere Verzeichnis zu machen? – batman

+0

Die empfohlene Methode zur Verwendung von CMake ist außerhalb der Quelle, die Sie ursprünglich mit dem cmake .. im Build-Ordner getan haben. Ich würde nicht versuchen, das zu besiegen. – drescherjm

+1

http://www.cmake.org/Wiki/CMake_FAQ#Out-of-source_build_trees – drescherjm

6

cmake .. erzeugt Makefiles im aktuellen Verzeichnis unter Verwendung der Datei ../CMakeLists.txt als Startpunkt. make Befehl, der danach ausgeführt wird, erstellt das Programm mit generierten Makefile (s) als Eingabe. Dies ist praktisch, um einen Quellcode zu behalten und Ergebnisse in verschiedenen Ordnern zu erstellen. Allgemeine Syntax ist: cmake source-dir (natürlich gibt es viele andere Schalter).