CMake statisch linken

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Jonathan
Establishment
Beiträge: 2478
Registriert: 04.08.2004, 20:06
Kontaktdaten:

CMake statisch linken

Beitrag von Jonathan »

Ich habe in meinem Projekt eine Bibliothek die ein paar Kernfunktionen implementiert. Dazu benutze ich ein paar Funktionen aus einer anderen Bibliothek. Will ich jetzt meine Bibliothek benutzen, muss ich überall auch die andere mitlinken.

Gibt es eine Möglichkeit, diese Abhängigkeit schon in meine Bibliothek reinzulinken? So dass diese Bibliothek schon all ihre Abhängigkeiten an Bord hat und quasi für sich alleine benutzt werden kann?
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: CMake statisch linken

Beitrag von Artificial Mind »

Der Befehl, den du suchst, heißt - so wie ich das sehe - TARGET_LINK_LIBRARIES.
Benutzung: TARGET_LINK_LIBRARIES(deinProjektName dieAbhängigkeiten)
Benutzeravatar
Jonathan
Establishment
Beiträge: 2478
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: CMake statisch linken

Beitrag von Jonathan »

Hm, ok: Ich habe jetzt also mein CMake Projekt, aufgeteilt in eine Anwendung und eine BIliothek. Die Bibliothek benutzt FreeImage. Wenn ich jetzt in CMake mit target_link_libraries FreeImage angeben, wird die in die Linkereingabe von meiner Anwendung aufgenommen. Dadurch linkt die Anwendung also FreeImage schonmal implizit, was ja nicht schonmal ok ist. Aber kann ich es auch so hinbekommen, dass nach dem kompilieren meiner Bibliothek die Anwendung die FreeImage.lib gar nicht mehr benötigt? Das würde nämlich nützlich, wenn ich mal nicht beides innerhalb eines großen CMake Projektes bauen würde. Das also, wenn ich meine Bibliothek kompiliere, die benötigten Teile von FreeImage darein gelinkt werden. Vermutlich wäre das Feld "zusätzliche Abhängigkeiten" unter "Bibliothekar" dann dafür verantwortlich, aber das bleibt leer, wenn ich das Projekt mit CMake generiere.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: CMake statisch linken

Beitrag von kimmi »

Wenn du die Sourcen von FreeImage hast: die einfach mit in deinem Projekt mitbauen. Wenn nicht: ist die FreeImage-Lib statisch linkbar? Oder gibt es die nur als dll? Statische Libs kannst meines Wissens nach mit deiner eigenen exportieren, so dass andere Kunden, die deine Lib benutzen, durch diese ebenfalls die Binaries und Symbole der Third-Party-Libs mit bekommen. Allerdings kenne ich die Option nicht, mittels der das im VS und damit dann auch in CMake möglich ist.

Gruß Kimmi
Benutzeravatar
Jonathan
Establishment
Beiträge: 2478
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: CMake statisch linken

Beitrag von Jonathan »

kimmi hat geschrieben:Statische Libs kannst meines Wissens nach mit deiner eigenen exportieren, so dass andere Kunden, die deine Lib benutzen, durch diese ebenfalls die Binaries und Symbole der Third-Party-Libs mit bekommen.
Ja, genau das würd ich gerne machen. FreeImage ist im defaultbuild zwar eine dll, aber damit müsste das doch auch gehen. Dann benötigt meine Bibliothek eben auch diese dll, aber eben die Importbibliothek dieser dll nicht mehr.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Antworten