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

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

DDD
DDDOriginal
2024-12-07 00:20:10245Durchsuche

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

Kombinieren mehrerer statischer Bibliotheken zu einer einzigen Bibliothek mit CMake

Beim Erstellen von Projekten, die auf zahlreichen statischen Bibliotheken basieren, kann eine Zusammenführung wünschenswert sein Diese Bibliotheken werden zur Veröffentlichung in einer einzigen Einheit zusammengefasst. CMake verfügt zwar über spezielle Methoden zum direkten Kombinieren von Zielbibliotheken, z. B. target_link_libraries(), führt jedoch möglicherweise nicht in allen Fällen die gewünschte Aktion aus.

Benutzerdefinierter Zielansatz

Ein Ansatz besteht darin, ein benutzerdefiniertes Ziel zu erstellen, das die statischen Bibliotheken direkt manipuliert. Durch die Ausführung von Befehlen wie ar oder libtool ist es möglich, Objektdateien aus einzelnen Bibliotheken zu extrahieren und diese dann wieder in einem einzigen Archiv zusammenzuführen. Dies kann durch den folgenden CMake-Code erreicht werden:

# Add the individual static libraries
add_library(a a.cpp a.h)
add_library(b b.cpp b.h)

# Create the combined library target
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
)

# Import the combined library
add_library(c STATIC IMPORTED GLOBAL)
add_dependencies(c combined)
set_target_properties(c
    PROPERTIES
    IMPORTED_LOCATION ${C_LIB}
)

# Link the combined library to the executable
target_link_libraries(main c)

Diese Methode fasst die Objektdateien aus den einzelnen Bibliotheken effektiv in einem einzigen Archiv zusammen und stellt so die gewünschte kombinierte Bibliothek bereit.

Alternative Überlegungen

Während der benutzerdefinierte Zielansatz das Ziel erreicht, können alternative Ansätze in Betracht gezogen werden. CMake stellt die Funktion link_libraries() bereit, die das Potenzial hat, mehrere Bibliotheken in einer einzigen Ausgabe zu verknüpfen. Darüber hinaus könnte eine Untersuchung der Verwendung der Funktion add_library() mit den Flags OBJECT oder INTERFACE eine Lösung bieten.

Das obige ist der detaillierte Inhalt vonWie kann ich mit CMake mehrere statische Bibliotheken zu einer einzigen Bibliothek 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