2012-09-02 20 views
19

Ho ottenuto l'origine del progetto Box2D e voglio compilare la parte del banco di prova. La cartella di progetto contiene le cartelle come: freeglu glui banco di prova (una demo) helloword (una demo) Box2D Costruire CMakeFilesCosa fa cmake .. do?

Ci sono molti CMakeLists.txt in tutte le diverse cartelle. Stavo pensando che dovrei fare tutti questi file in modo che i file vengano creati in tutti i posti richiesti. Ho letto questo (come le istruzioni da fare voglio che voglio):

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 

Cosa fa il cmake .. fare? Non c'è CMakeLists.txt nella cartella build.

+0

Ma ci dovrebbe essere un file CMakeLists.txt nella cartella "Box2D_v2.2.1". In "cmake ..", i doppi segni puntati indicano che il file CMakeLists.txt esiste in una directory in alto nella gerarchia di directory "Box2D_v2.2.1/Build /". –

risposta

35

cmake è un generatore di Makefile.

Quando si chiama cmake [path], gli chiedi di generare un Makefile nelle directory corrente seguenti istruzioni fornite nella [path]/CMakeLists.txt

uscita solito cmake alcuni messaggi mentre si sta lavorando, e dopo che è stato fatto senza errori , puoi digitare "make" per eseguire il Makefile appena creato.

CMakeLists.txt file possono fare riferimento ad altri file di CMakeLists.txt in sotto-directory, in modo che di solito sono interessati solo dal CMakeLists.txt della directory superiore, non gli altri.

L'utilizzo di una directory "build" vuota è una tecnica chiamata "build out-source", in cui tutti i file generati (.o, eseguibili, Makefile, .anything) vengono generati nella directory "build" separata e non mescolato con i file sorgente. Se si desidera pulire tutto, è possibile eliminare tutto il contenuto della directory di creazione.

Infatti, puoi mettere la tua directory "build" in qualsiasi posto, purché tu dia cmake il percorso corretto del top CMakeLists.txt. Puoi persino avere diverse directory di compilazione. È molto utile se hai bisogno di più build diverse allo stesso tempo (con diverse opzioni, diverse versioni di gcc, ecc.)

Nei vecchi programmi, puoi generare anche il Makefile, ma usando ./configure (questo è chiamato auto- strumenti. Potresti averlo già incontrato). cmake è considerato un successore degli strumenti automatici.

+0

Ah! Molte grazie! Questo ha chiarito la mia confusione. Avevo provato a eseguire cmake in un file contenente CMakeLists.txt digitando "cmake" 'senza' specifica file e pensavo di aver visto una pagina man di cmake visualizzata. Forse non l'ho provato bene. :) – batman

+0

Se posso estendere questo un po 'più, i comandi effettivi erano diversi da quello che avevo pensato. C'era un 'cmake -DBOX2D_INSTALL = ON -DBOX2D_BUILD_SHARED = ON' .. invece di solo' cmake ..' Qualche idea su cosa significhi? – batman

+1

@learner sì. Aggiungendo opzioni al richiamo di cmake, gli dai suggerimenti su come dovrebbe generare il Makefile, magari attivando alcune funzionalità o utilizzando una modalità diversa. Nella maggior parte dei casi, puoi anche modificare queste opzioni digitando "ccmake". (attenzione al punto) nella directory di costruzione. Avrai quindi una piccola interfaccia che elenca le opzioni di generazione del Makefile. – Offirmo

3

Bene, .. è una scorciatoia per la cartella principale, quindi presumibilmente agirà su qualsiasi cosa trovi in ​​Box2D_v2.2.1.

+0

@Alex Farber e Rook, quando ho provato cmake nella cartella principale non è successo nulla. Ha dato una guida di alcuni dei tipi di cmake. Ed è necessario andare in 1 step in profondità e cmake nella directory superiore? – batman

+0

Il metodo consigliato per utilizzare CMake è fuori dalla sorgente, cosa che inizialmente si faceva con cmake .. nella cartella Build. Non proverei a sconfiggerlo. – drescherjm

+1

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

6

cmake .. genera makefile nella directory corrente, utilizzando il file ../CMakeLists.txt come punto di partenza. effettua il comando, eseguito successivamente, crea il programma, utilizzando i file makefile generati come input. Questo è conveniente per mantenere un codice sorgente e creare risultati in diverse cartelle. La sintassi generale è: cmake source-dir (ovviamente ci sono molti altri switch).