Die Pflege der Abhängigkeiten eines Projekts kann eine Herausforderung sein, wenn es auf mehreren statischen Bibliotheken basiert. Um den Prozess zu rationalisieren, ist die Zusammenführung dieser Bibliotheken zu einer einzigen Einheit wünschenswert. CMake bietet zwar Funktionen zum Verknüpfen von Bibliotheken, es fehlt jedoch die Funktionalität zum direkten Kombinieren statischer Bibliotheken.
Um dieses Problem zu beheben, kann ein benutzerdefiniertes Ziel verwendet werden, um das gewünschte Ergebnis zu erzielen. Mithilfe von Befehlen wie ar oder libtool können die einzelnen Objektdateien aus den statischen Bibliotheken extrahiert und in einem neuen Archiv zusammengeführt werden. Betrachten Sie beispielsweise den folgenden Codeausschnitt:
cmake_minimum_required(VERSION 2.8.7) add_library(b b.cpp b.h) add_library(a a.cpp a.h) add_executable(main main.cpp) set(C_LIB ${CMAKE_BINARY_DIR}/libcombi.a) add_custom_target(combined COMMAND ar -x $<TARGET_FILE:a> COMMAND ar -x $<TARGET_FILE:b> COMMAND ar -qcs ${C_LIB} *.o WORKING_DIRECTORY ${CMAKE_BINARY_DIR} DEPENDS a b ) add_library(c STATIC IMPORTED GLOBAL) add_dependencies(c combined) set_target_properties(c PROPERTIES IMPORTED_LOCATION ${C_LIB} ) target_link_libraries(main c)
In diesem Beispiel führt das kombinierte benutzerdefinierte Ziel die erforderlichen Befehle aus, um Objektdateien aus den a- und b-Bibliotheken zu extrahieren, und führt sie dann in einem neuen Archiv mit dem Namen zusammen libcombi.a. Diese kombinierte Bibliothek kann mithilfe des c-Ziels in die ausführbare Hauptdatei importiert werden.
Alternativ kann zu diesem Zweck der Befehl libtool aus Apples Entwicklungstools verwendet werden:
add_custom_target(combined COMMAND libtool -static -o ${C_LIB} $<TARGET_FILE:a> $<TARGET_FILE:b> WORKING_DIRECTORY ${CMAKE_BINARY_DIR} DEPENDS a b )
Während dieser Ansatz Folgendes bietet Da es sich um eine robuste Lösung handelt, wäre es von Vorteil, eine nativere Implementierung in CMake zu haben, um statische Bibliotheken direkt zu kombinieren. Dies würde den Prozess weiter rationalisieren und die Notwendigkeit benutzerdefinierter Ziele überflüssig machen.
Das obige ist der detaillierte Inhalt vonWie kann ich mit CMake mehrere statische Bibliotheken zu einer einzigen Bibliothek zusammenführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!