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?
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
).
Verwenden Sie set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "/some/full/path/to/bin")
Verwenden Sie die Variable EXECUTABLE_OUTPUT_PATH
CMake, um den erforderlichen Pfad festzulegen. Weitere Informationen finden Sie in der Online-Dokumentation zu CMake:
$ cat CMakeLists.txt
project (hello)
set(EXECUTABLE_OUTPUT_PATH "bin")
add_executable (hello hello.c)
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/"
)
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·
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.
cat CMakeLists.txt
project (hello)
set(CMAKE_BINARY_DIR "/bin")
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
add_executable (hello hello.c)