Recherche…


Syntaxe

  • find_package (pkgname [version] [EXACT] [QUIET] [OBLIGATOIRE])
  • inclure (FindPkgConfig)
  • pkg_search_module (préfixe [OBLIGATOIRE] [QUIET] pkgname [otherpkg ...])
  • pkg_check_modules (préfixe [REQUIRED] [QUIET] pkgname [otherpkg ...])

Paramètres

Paramètre Détails
version (optionnel) Version minimale du paquet définie par un nombre majeur et éventuellement un numéro mineur, correctif et modifié, au format major.minor.patch.tweak
EXACT (optionnel) Indiquez que la version spécifiée dans la version est la version exacte à trouver
OBLIGATOIRE (facultatif) Lève automatiquement une erreur et arrête le processus si le package est introuvable
CALME (facultatif) La fonction n'envoie aucun message à la sortie standard

Remarques

  • La méthode find_package est compatible sur toutes les plates-formes, tandis que la méthode pkg-config n'est disponible que sur les plates-formes de type Unix, telles que Linux et OSX.

  • Une description complète des nombreux paramètres et options de find_package se trouve dans le manuel .

  • Même s'il est possible de spécifier de nombreux paramètres facultatifs tels que la version du package, tous les modules de recherche n'utilisent pas tous ces paramètres correctement. Si un comportement non défini se produit, il peut être nécessaire de trouver le module dans le chemin d'installation de CMake et de corriger ou de comprendre son comportement.

Utilisez find_package et Find modules .cmake

Le moyen par défaut de rechercher des packages installés avec CMake est d'utiliser la fonction find_package conjointement avec un fichier Find<package>.cmake . Le fichier a pour but de définir les règles de recherche pour le package et de définir différentes variables, telles que <package>_FOUND , <package>_INCLUDE_DIRS et <package>_LIBRARIES .

De nombreux fichiers Find<package>.cmake sont déjà définis par défaut dans CMake. Cependant, s'il n'y a pas de fichier pour le paquet dont vous avez besoin, vous pouvez toujours écrire votre propre fichier et le mettre dans ${CMAKE_SOURCE_DIR}/cmake/modules (ou tout autre répertoire si CMAKE_MODULE_PATH été remplacé)

Une liste des modules par défaut se trouve dans le manuel (v3.6) . Il est essentiel de vérifier le manuel en fonction de la version de CMake utilisée dans le projet ou il peut y avoir des modules manquants. Il est également possible de trouver les modules installés avec cmake --help-module-list .

Il y a un bon exemple pour un FindSDL2.cmake sur Github

Voici un base CMakeLists.txt qui nécessiterait SDL2:

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})

Utilisez pkg_search_module et pkg_check_modules

Sur les systèmes d'exploitation de type Unix, il est possible d'utiliser le programme pkg-config pour rechercher et configurer des packages fournissant un fichier <package>.pc .

Pour pouvoir utiliser pkg-config , il est nécessaire d'appeler include(FindPkgConfig) dans un CMakeLists.txt . Ensuite, il y a 2 fonctions possibles:

  • pkg_search_module , qui vérifie le package et utilise le premier disponible.
  • pkg_check_modules , qui vérifie tous les paquets correspondants.

Voici un base CMakeLists.txt qui utilise pkg-config pour trouver SDL2 avec une version supérieure ou égale à 2.0.1:

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow