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

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

DDD
DDDOriginal
2024-12-03 05:29:09468Durchsuche

How Can I Merge Multiple Static Libraries into One Using CMake?

Statische Bibliotheken zu einer mit CMake kombinieren

Wenn Sie mit Projekten arbeiten, die von mehreren statischen Bibliotheken abhängig sind, ist das Zusammenführen dieser Bibliotheken zu einer einzigen zusammenhängenden Einheit unerlässlich. CMake bietet eine robuste Lösung für diese Herausforderung und macht die Pflege nachgelagerter Abhängigkeiten überflüssig.

Das Problem

Versuche, statische Bibliotheken mithilfe von target_link_libraries direkt zu kombinieren, erweisen sich häufig als erfolglos. Wenn die kombinierte Bibliothek jedoch als Abhängigkeit für eine ausführbare Datei verwendet wird, scheint CMake die Bibliotheken automatisch zusammenzuführen.

Die Lösung

Ein benutzerdefiniertes Ziel kann verwendet werden, um das gewünschte Ergebnis zu erzielen:

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
        )

Dieses Ziel extrahiert Objektdateien aus den einzelnen statischen Bibliotheken und kombiniert sie in einer neuen statischen Bibliothek.

Variantenverwendung libtool

Falls gewünscht, kann das Dienstprogramm libtool für den gleichen Zweck genutzt 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
        )

Fazit

Obwohl es den Anschein hat, dass es einen einfacheren Ansatz geben sollte, ist dies der Fall Das benutzerdefinierte Ziel kombiniert statische Bibliotheken effektiv in einer. Selbstverständlich vereinfacht diese Technik das Abhängigkeitsmanagement und gewährleistet die nahtlose Bereitstellung kombinierter Bibliotheken an nachgelagerte Verbraucher.

Das obige ist der detaillierte Inhalt vonWie kann ich mit CMake mehrere statische Bibliotheken zu einer zusammenführen?. 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