Heim > Backend-Entwicklung > C++ > Wie kann ich mit CMake mehrere statische Bibliotheken zu einer einzigen Bibliothek zusammenführen?

Wie kann ich mit CMake mehrere statische Bibliotheken zu einer einzigen Bibliothek zusammenführen?

Patricia Arquette
Freigeben: 2024-12-02 11:45:15
Original
119 Leute haben es durchsucht

How Can I Merge Multiple Static Libraries into a Single Library Using CMake?

Kombinieren mehrerer statischer Bibliotheken zu einer einzigen Bibliothek mit CMake

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)
Nach dem Login kopieren

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
        )
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage