cmake
Suchen und verwenden Sie installierte Pakete, Bibliotheken und Programme
Suche…
Syntax
- find_package (pkgname [version] [EXACT] [QUIET] [ERFORDERLICH])
- include (FindPkgConfig)
- pkg_search_module (Präfix [ERFORDERLICH] [QUIET] pkgname [otherpkg ...])
- pkg_check_modules (Präfix [ERFORDERLICH] [QUIET] pkgname [otherpkg ...])
Parameter
Parameter | Einzelheiten |
---|---|
Version (optional) | Mindestversion des Pakets, definiert durch eine Hauptnummer und optional eine Neben-, Patch- und Tweak-Nummer, im Format major.minor.patch.tweak |
EXACT (optional) | Geben Sie an, dass die in Version angegebene version genau die zu suchende version ist |
ERFORDERLICH (optional) | Löst automatisch einen Fehler aus und stoppt den Prozess, wenn das Paket nicht gefunden wird |
QUIET (optional) | Die Funktion sendet keine Nachricht an die Standardausgabe |
Bemerkungen
Der
find_package
Weg ist auf allen Plattformen kompatibel, während derpkg-config
Weg nur auf Unix-ähnlichen Plattformen wie Linux und OSX verfügbar ist.Eine vollständige Beschreibung der
find_package
zahlreichen Parameter und Optionen finden Sie im Handbuch .Obwohl es möglich ist, viele optionale Parameter anzugeben, z. B. die Version des Pakets, verwenden nicht alle Suchmodule alle diese Parameter ordnungsgemäß. Wenn ein undefiniertes Verhalten auftritt, kann es erforderlich sein, das Modul im Installationspfad von CMake zu finden und dessen Verhalten zu beheben oder zu verstehen.
Verwenden Sie find_package und find .cmake-Module
Die Standardmethode zum Suchen installierter Pakete mit CMake ist die Verwendung der find_package
Funktion in Verbindung mit einer Find<package>.cmake
Datei. Der Zweck der Datei besteht darin, die <package>_FOUND
für das Paket zu definieren und verschiedene Variablen festzulegen, z. B. <package>_FOUND
, <package>_INCLUDE_DIRS
und <package>_LIBRARIES
.
Viele Find<package>.cmake
Dateien vom Find<package>.cmake
sind bereits standardmäßig in CMake definiert. Wenn jedoch keine Datei für das von Ihnen benötigte Paket vorhanden ist, können Sie immer Ihre eigene schreiben und in ${CMAKE_SOURCE_DIR}/cmake/modules
(oder in ein anderes Verzeichnis, wenn CMAKE_MODULE_PATH
überschrieben wurde)
Eine Liste der Standardmodule finden Sie im Handbuch (v3.6) . Es ist unbedingt erforderlich, das Handbuch anhand der im Projekt verwendeten Version von CMake zu überprüfen, da sonst Module fehlen. Es ist auch möglich, die installierten Module mit der cmake --help-module-list
.
Es gibt ein schönes Beispiel für einen FindSDL2.cmake
auf Github
Hier ist eine grundlegende CMakeLists.txt
, die SDL2 erfordern würde:
cmake_minimum_required(2.8 FATAL_ERROR)
project("SDL2Test")
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules")
find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} main.c)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})
Verwenden Sie pkg_search_module und pkg_check_modules
Unter Unix-ähnlichen Betriebssystemen können Sie mit dem Programm pkg-config
Pakete suchen und konfigurieren, die eine <package>.pc
Datei enthalten.
Um pkg-config
, müssen Sie include(FindPkgConfig)
in einer CMakeLists.txt
. Dann gibt es 2 mögliche Funktionen:
-
pkg_search_module
, das nach dem Paketpkg_search_module
und das erste verfügbare verwendet. -
pkg_check_modules
, die alle entsprechenden Pakete prüfen.
Hier ist eine grundlegende CMakeLists.txt
, die pkg-config
, um SDL2 mit der Version über 2.0.1 zu suchen:
cmake_minimum_required(2.8 FATAL_ERROR)
project("SDL2Test")
include(FindPkgConfig)
pkg_search_module(SDL2 REQUIRED sdl2>=2.0.1)
include_directories(${SDL2_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} main.c)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})