CMake Ausgabe / Build-Verzeichnis
Ich bin ziemlich neu auf cmake, und lies ein paar tutorials wie es zu benutzen, und schrieb einige komplizierte 50 Zeilen CMake-Skript, um ein Programm für 3 verschiedene Compiler. Dies ist wahrscheinlich Schluss, alle meine Kenntnisse in cmake.
Nun mein problem ist, dass ich einige source Codes, deren Ordner ich nicht Anfassen wollen/Durcheinander, wenn ich das Programm. Ich will, dass alle cmake und make Ausgabe-Dateien und Ordner und gehe in ../Compile/, also habe ich ein paar Variablen in meinen cmake-Skript, und es funktionierte für irgendwann, wenn ich etwas wie dies auf meinem laptop:
Compile$ cmake ../src
Compile$ make
Denen mit, dass ich eine saubere Ausgabe in den Ordner, ich bin in jetzt, das ist genau das, was ich Suche.
Ich jetzt auf einen anderen computer verschoben und neu kompiliert CMake 2.8.11.2, und ich bin fast wieder auf Platz eins! Es ist immer stellt die Sache in den src-Ordner, wo meine CMakeLists.txt liegt.
Den Teil, wo ich wählen Sie das Verzeichnis, in meinen cmake-Skript ist dies:
set(dir ${CMAKE_CURRENT_SOURCE_DIR}/../Compile/)
set(EXECUTABLE_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE)
set(LIBRARY_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dir})
set(CMAKE_BUILD_FILES_DIRECTORY ${dir})
set(CMAKE_BUILD_DIRECTORY ${dir})
set(CMAKE_BINARY_DIR ${dir})
SET(EXECUTABLE_OUTPUT_PATH ${dir})
SET(LIBRARY_OUTPUT_PATH ${dir}lib)
SET(CMAKE_CACHEFILE_DIR ${dir})
Und jetzt ist es endet immer mit:
-- Build files have been written to: /.../src
Bin ich etwas fehlt?
CMAKE_BINARY_DIR
oder CMAKE_CACHEFILE_DIR
. Was passiert, wenn Sie entfernen alle diese set()
aufruft und nur noch cd Kompilieren; rm -rf *; cmake ../src
? InformationsquelleAutor der Frage The Quantum Physicist | 2013-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
(Drehen meine Kommentare in eine Antwort)
Gibt es wenig brauchen, um alle Variablen, die Sie festlegen. CMake setzt diese um sinnvolle Voreinstellungen. Sollten Sie auf jeden Fall nicht ändern
CMAKE_BINARY_DIR
oderCMAKE_CACHEFILE_DIR
. Behandeln Sie diese als schreibgeschützt.Entfernen Sie zunächst die bestehende problematische cache-Datei aus dem src-Verzeichnis:
Dann entfernen Sie alle
set()
Befehle und tun:Solange Sie sich außerhalb des source-Verzeichnis beim ausführen CMake, es wird nicht ändern Sie die Quell-Verzeichnis, es sei denn, Ihr CMakeList ausdrücklich sagt es zu.
Sobald Sie diese haben, können Sie schauen, wo CMake setzt die Dinge in der Standardeinstellung, und nur, wenn Sie nicht zufrieden sind mit den Standard-Speicherorte (wie der default-Wert von
EXECUTABLE_OUTPUT_PATH
), ändern Sie nur diejenigen, die Sie brauchen. Und versuchen, Sie auszudrücken, relativ zuCMAKE_BINARY_DIR
,CMAKE_CURRENT_BINARY_DIR
,PROJECT_BINARY_DIR
etc.Wenn man sich CMake-Dokumentation, werden Sie sehen, Variablen unterteilt in semantische Abschnitte. Außer für sehr besonderen Umständen, sollten Sie behandeln alle diese finden Sie unter "Variablen, die Informationen Bieten," als nur-lese-innen CMakeLists.
InformationsquelleAutor der Antwort Angew
Es klingt wie Sie wollen ein out-of-source build. Es gibt ein paar Möglichkeiten, wie Sie können, erstellen Sie eine out-of-source build.
Tun, was Sie getan haben, führen Sie
wodurch wird cmake zu generieren bauen, Baum in
/path/to/my/build/folder
für die source-tree in/path/to/my/source/folder
.Sobald Sie es erstellt haben, cmake merkt sich, wo der source-Ordner - so können Sie erneut ausführen
cmake auf dem build-tree mit
oder sogar
wenn das aktuelle Verzeichnis bereits das build-Ordner.
Verwenden einige nicht dokumentierte Optionen, um die Quell-und build-Ordner:
wird das tun genau die gleiche Sache wie (1), aber ohne Vertrauen auf das aktuelle Arbeitsverzeichnis.
CMake setzt seine Ausgänge in den bauen, Baum standardmäßig, also, wenn Sie sind großzügig mit
${CMAKE_SOURCE_DIR}
oder${CMAKE_CURRENT_SOURCE_DIR}
in Ihrem cmake-Dateien, sollte es nicht berühren source-tree.Die größte Sache, die schief gehen können, wenn Sie zuvor erzeugt einen build-tree in deinem source tree (d.h. Sie haben eine in Quelle bauen). Sobald Sie dies getan haben den zweiten Teil von (1) oben in tritt, und cmake nicht, änderungen an der Quelle oder bauen Standorten. So, Sie können nicht erstellen Sie eine out-of-source build für ein Quellverzeichnis mit einem in-source build -. Sie können dieses Problem beheben, relativ leicht durch das entfernen von (mindestens)
CMakeCache.txt
aus dem source-Verzeichnis. Es gibt ein paar andere Dateien (meist in derCMakeFiles
Verzeichnis), CMake erzeugt, sollten Sie entfernen, aber diese wird nicht dazu führen, cmake zur Behandlung der source-tree als build-tree.Da out-of-source-builds sind oft mehr als wünschenswert in-source-builds, möchten Sie vielleicht ändern Sie Ihre cmake zu verlangen, die out-of-source-builds:
Dem oben genannten makro stammt aus einer Häufig verwendeten Modul namens
MacroOutOfSourceBuild
. Es gibt zahlreiche Quellen fürMacroOutOfSourceBuild.cmake
auf google, aber ich kann nicht scheinen zu finden, die ursprüngliche, und es ist kurz genug, um hier in vollem Umfang.Leider cmake hat in der Regel geschrieben, ein paar Dateien durch die Zeit, die das makro aufgerufen wird, obwohl es so wird verhindern, dass Sie tatsächlich um das bauen werden Sie noch brauchen, um zu löschen
CMakeCache.txt
undCMakeFiles
.Finden Sie es vielleicht hilfreich um die Pfade, die Binärdateien freigegeben und statische Bibliotheken sind geschrieben - in dem Fall sehen wie mache ich cmake-Ausgabe in ein " bin " Verzeichnis? (disclaimer, ich habe die top-stimmten Antwort auf die Frage...aber das ist, wie ich weiß es).
InformationsquelleAutor der Antwort Adam Bowen
Als von CMake Wiki: http://www.cmake.org/Wiki/CMake_Useful_Variables
Vergleichen Sie diese zwei Variablen zu bestimmen, wenn out-of-source build gestartet wurde
InformationsquelleAutor der Antwort damkrat
Drehen mein Kommentar in eine Antwort:
In den Fall, dass jemand Tat, was ich Tat, war, starten Sie, indem Sie alle build-Dateien in das Quellcode-Verzeichnis:
cmake wird eine Reihe von build-Dateien und cache-Dateien (
CMakeCache.txt
,CMakeFiles
,cmake_install.cmake
, etc) in dersrc
dir.Ändern, um eine out-of-source build, musste ich entfernen Sie alle diese Dateien. Dann könnte ich das tun, was @Agnew empfohlen, seine Antwort:
InformationsquelleAutor der Antwort Avi Tevet
Zunächst einmal sollten Sie nicht relais auf bauen dir den Namen im Skript. Zeile mit ../Kompilieren geändert werden muss.
Es ist, weil es bis zu Benutzer, wo zu kompilieren.
Stattdessen verwenden Sie eine der vordefinierten Variablen:
http://www.cmake.org/Wiki/CMake_Useful_Variables
(schauen Sie für CMAKE_BINARY_DIR und CMAKE_CURRENT_BINARY_DIR)
InformationsquelleAutor der Antwort Michał Walenciak