zu Export habe ich ein Projekt mit dieser Struktur:Cmake: Anbindung an statischer interne Bibliothek ohne es
/path/to/my/project
├── CMakeLists.txt
├── internal-libs
│ ├── internal-lib1
├── libs
│ ├── lib1
│ ├── lib2
lib1
ist eine statische Bibliothek.
lib2
ist eine statische Bibliothek.
internal-lib1
ist eine statische Bibliothek.
lib2 verbindet statisch mit lib2 und internal-lib1. lib1
und lib2
werden exportiert, aber internal-lib1
wird zurückgelassen werden. Für die Verknüpfung, die ich habe:
target_link_libraries(lib2 PRIVATE internal-lib1)
target_link_libraries(lib2 PRIVATE lib1)
Mein Verständnis ist, dass, weil ich die Verknüpfung statisch und privat, Alle Informationen über interne-lib1 würde in lib2 enthalten sein und dass ich nicht intern-lib1 zu exportieren haben zur Außenwelt.
Allerdings, wenn ich versuche, es in einem Client-Programm zu verwenden, ich den Fehler:
/usr/bin/ld cannot find -llib-internal1
collect2: error: ld returned 1 exit status
in meinem erzeugt Export Config-Datei, die ich habe:
# Create imported target lib2
add_library(lib2 STATIC IMPORTED)
set_target_properties(lib2 PROPERTIES
INTERFACE_LINK_LIBRARIES "$<LINK_ONLY:lib1>;**$<LINK_ONLY:internal-lib1>**"
)
# Create imported target lib1
add_library(lib1 STATIC IMPORTED)
bin ich Missverständnis der statische Verknüpfung oder stimmt etwas nicht mit meinem Setup? Ich benutze cmake 3.2.2. Alle meine Zielvorgaben sind PRIVAT. Ich verstehe nicht, warum INTERFACE_LINK_LIBRARIES
mit Einträgen gefüllt ist und was LINK_ONLY bedeutet.
p.s. Eigentlich sollten lib1 und lib2 gemeinsam genutzte Bibliotheken sein, aber ich kann nicht einmal die statische Version zur Vereinfachung verwenden. Hier beschreibe ich den statischen Fall für die exportierbaren Bibliotheken.
Ich sehe danke. Ich habe im Grunde versucht zu tun, was versucht wird (http://stackoverflow.com/a/11448878/4376555) für den einfachen Fall von statischen Bibliotheken, da ich dachte, dass seine Methoden aber unnötig kompliziert sind. Aber ich denke, Ihre Lösung ist noch hacky. – ShS