Ich habe gerade angefangen, mit CMake zu arbeiten, und mir ist aufgefallen, dass sie sowohl eine find_package
als auch eine find_library
haben. Und das verwirrt mich. Kann jemand den Unterschied zwischen einem Paket und einer Bibliothek in der Programmierwelt erklären? Oder in der Welt von CMake?
Schätze es, Leute!
Stellen Sie sich vor, Sie möchten zlib in Ihrem Projekt verwenden. Sie müssen die Header-Datei zlib.h
und die Bibliothek libz.so
(unter Linux) finden. Sie können die Low-Level-cmake-Befehle find_path
und find_library
verwenden, um sie zu finden, oder Sie können find_package(ZLIB)
verwenden. Der spätere Befehl wird versuchen, alles herauszufinden, was notwendig ist, um zlib zu verwenden. Es können zusätzliche Makrodefinitionen oder Abhängigkeiten sein.
Update, weitere Details zu find_package
: Wenn der CMake-Befehl find_package(SomeThing)
aufgerufen wird, Wie es in der Dokumentation heißt gibt es zwei Möglichkeiten: den Modulmodus (der nach einer Datei FindSomeThing.cmake
sucht) oder den Konfigurationsmodus (der nach einer Datei namens SomeThingConfig.cmake
sucht) . Für ZLIB gibt es ein Modul namens FindZLIB
, das mit CMake selbst ausgeliefert wird (auf meinem Linux-Rechner ist das die Datei /usr/share/cmake/Modules/FindZLIB.cmake
). Dieses Modul ist ein CMake-Skript, das die CMake-API verwendet, um nach ZLIB-Dateien an Standardspeicherorten zu suchen, oder den Benutzer nach dem Speicherort fragt, wenn dieser nicht automatisch gefunden werden kann.
Tags und Links package cmake libraries difference