it-swarm.com.de

Wie mache ich eine CMake-Ausgabe in ein bin-Verzeichnis?

Ich baue gerade ein Projekt mit einer Plugin-Struktur auf. Ich verwende CMake, um das Projekt zu kompilieren. Die Plugins werden in separaten Verzeichnissen zusammengestellt. Mein Problem ist, dass CMake Binaries und Plugins, dynamische Bibliotheken, in der Verzeichnisstruktur der Quelle kompiliert und speichert. Wie lasse ich CMake die Dateien in einem Verzeichnis wie ./bin speichern?

134

Wie in Olegs Antwort glaube ich, dass die korrekte zu definierende Variable CMAKE_RUNTIME_OUTPUT_DIRECTORY ist. Wir verwenden Folgendes in unserer Wurzel CMakeLists.txt:

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

Sie können die Ausgabeverzeichnisse auch pro Ziel angeben:

set_target_properties( targets...
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

In beiden Fällen können Sie _[CONFIG] an den Variablen-/Eigenschaftennamen anhängen, um das Ausgabeverzeichnis auf eine bestimmte Konfiguration anzuwenden (die Standardwerte für die Konfiguration sind DEBUG, RELEASE, MINSIZEREL und RELWITHDEBINFO).

234
Adam Bowen

Verwenden Sie set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "/some/full/path/to/bin")

25
Oleg

Verwenden Sie die Variable EXECUTABLE_OUTPUT_PATH CMake, um den erforderlichen Pfad festzulegen. Weitere Informationen finden Sie in der Online-Dokumentation zu CMake:

CMake 2.8.8 Dokumentation

6
gtikok
$ cat CMakeLists.txt
project (hello)
set(EXECUTABLE_OUTPUT_PATH "bin")
add_executable (hello hello.c)
3
mcandre

Für mich verwende ich cmake 3.5, das unten stehende (set variable) funktioniert nicht:

set(
      ARCHIVE_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
      LIBRARY_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
      RUNTIME_OUTPUT_DIRECTORY "/home/xy/cmake_practice/bin/"
)

aber das funktioniert (set set_target_properties):

set_target_properties(demo5
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
    LIBRARY_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
    RUNTIME_OUTPUT_DIRECTORY "/home/xy/cmake_practice/bin/"
)
1
Jayhello

Englisch ist nicht meine Muttersprache; Bitte entschuldigen Sie Tippfehler.

benutze diese Linienkonfiguration:
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build/)
Platzieren Sie Ihr CMakeLists.txt-Projekt.
Dieses $ {PROJECT_SOURCE_DIR} ist Ihr aktuelles Quellverzeichnis, in dem das Projekt gespeichert ist.
und wenn wandern, warum ist $ {EXECUTABLE_OUTPUT_PATH}
Diese Datei überprüfen CMakeCache.txt dann suche das Schlüsselwort output path,
alle Variablen hier definieren, würde es eine vollständige Erklärung des Projekts geben alle setting·

1
jdir.s

Unabhängig davon, ob ich dies in der Datei main CMakeLists.txt oder in den einzelnen Dateien definiere, wird weiterhin davon ausgegangen, dass alle Bibliotheken und Bins vom Hauptpfad entfernt werden sollen, was die am wenigsten nützliche Annahme von allen ist.

0
Jerry Miller
cat CMakeLists.txt
project (hello)
set(CMAKE_BINARY_DIR "/bin")
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
add_executable (hello hello.c)
0
Meet Modia