Heim >Backend-Entwicklung >C++ >Wie kann ich mit CMake mehrere statische Bibliotheken zu einer einzigen kombinieren?
In Softwareentwicklungsszenarien ist es üblich, mehrere statische Bibliotheken zu haben, die als Abhängigkeiten für ein größeres Projekt dienen. Um die Verteilung zu optimieren und die Komplexität des Abhängigkeitsmanagements zu verringern, kann es wünschenswert sein, diese Bibliotheken in einer einzigen statischen Bibliothek zusammenzufassen. CMake bietet mehrere Ansätze, um dieses Ziel zu erreichen.
Ein Ansatz besteht darin, den Befehl target_link_libraries zu nutzen. Es ist jedoch wichtig zu beachten, dass dieser Befehl lediglich die angegebenen Bibliotheken als Linkabhängigkeiten hinzufügt und sie nicht zu einer einzigen Bibliothek kombiniert.
Für eine nahtlosere Lösung sollten Sie die Verwendung eines benutzerdefinierten Ziels zusammen mit dem AR in Betracht ziehen Befehl. Hier ist ein CMake-Beispielskript, das diesen Ansatz demonstriert:
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)
Dieses Skript erstellt zwei statische Bibliotheken (a und b) und eine ausführbare Datei (main), die von einer kombinierten Bibliothek (c) abhängt. Das kombinierte benutzerdefinierte Ziel verwendet den Befehl ar, um die Objektdateien aus den einzelnen Bibliotheken zu extrahieren und zu c.a. zu kombinieren.
Alternativ können Sie Apples libtool verwenden, um die Kombination durchzuführen:
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 Da benutzerdefinierte Zielansätze eine Möglichkeit bieten, mehrere statische Bibliotheken zu kombinieren, ist es erwähnenswert, dass die CMake-Community immer noch aktiv nach einer eleganteren Lösung für diese allgemeine Aufgabe sucht.
Das obige ist der detaillierte Inhalt vonWie kann ich mit CMake mehrere statische Bibliotheken zu einer einzigen kombinieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!