cmake
Rechercher et utiliser des packages, bibliothèques et programmes installés
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éthodepkg-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})