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 der pkg-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 Paket pkg_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})


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow