Heim >Backend-Entwicklung >C++ >Wie kann ich mit CMake mehrere statische Bibliotheken zu einer einzigen kombinieren?

Wie kann ich mit CMake mehrere statische Bibliotheken zu einer einzigen kombinieren?

DDD
DDDOriginal
2024-12-01 15:48:10453Durchsuche

How Can I Combine Multiple Static Libraries into a Single One Using CMake?

Kombinieren mehrerer statischer Bibliotheken zu einer einzigen mit CMake

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn