web-dev-qa-db-fra.com

Comment installer votre module personnalisé CMake-Find

Je configure et empaquette ma bibliothèque en utilisant CMake et CPack. J'ai écrit mon propre module de recherche: FindMyLib.cmake.

Comment dire à CMake/CPack d'ajouter ce fichier au répertoire du module CMake, afin que les futurs développeurs puissent simplement spécifier FIND_PACKAGE(MyLib) pour utiliser ma bibliothèque?

50
goocreations

Vous pouvez définir CMAKE_MODULE_PATH et distribuez votre personnalisé FindFoo.cmake avec votre projet. Par exemple:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
59
simont

Le répertoire du module CMake fait partie de l'arborescence d'installation de CMake lui-même, et en tant que tel, vous ne devriez pas essayer d'y ajouter quoi que ce soit.

Le répertoire des modules CMake contient des modules qui ont été écrits ou au moins revus par Kitware, et y ajouter les vôtres donnerait l'impression aux utilisateurs de votre projet que c'était également le cas pour votre projet.

Vous feriez mieux d'installer simplement FindMyLib.cmake à l'un des endroits recherchés par find_package:

<prefix>/                                               (Windows)
<prefix>/(cmake|CMake)/                                 (Windows)
<prefix>/<name>*/                                       (Windows)
<prefix>/<name>*/(cmake|CMake)/                         (Windows)
<prefix>/(lib/<Arch>|lib|share)/cmake/<name>*/          (Unix)
<prefix>/(lib/<Arch>|lib|share)/<name>*/                (Unix)
<prefix>/(lib/<Arch>|lib|share)/<name>*/(cmake|CMake)/  (Unix)
<prefix>/<name>.framework/Resources/                    (Apple)
<prefix>/<name>.framework/Resources/CMake/              (Apple)
<prefix>/<name>.framework/Versions/*/Resources/         (Apple)
<prefix>/<name>.framework/Versions/*/Resources/CMake/   (Apple)
<prefix>/<name>.app/Contents/Resources/                 (Apple)
<prefix>/<name>.app/Contents/Resources/CMake/           (Apple)


Voir la documentation pour find_package pour plus de détails sur la façon dont find_package recherches. Le didacticiel d'empaquetage CMake est également utile dans ce cas.

46
Fraser

La meilleure façon de permettre

les futurs développeurs peuvent simplement spécifier FIND_PACKAGE (MyLib) pour utiliser ma bibliothèque

consiste à écrire un fichier de configuration de package (-config.cmake), pas un module Find. Le fichier de configuration du package doit ensuite être installé dans l'un des dossiers où le module FindPackage recherche (quelque chose comme/lib/package/ou/lib/cmake/package le second étant préféré)

Le module FindPackage chargera automatiquement le fichier de configuration s'il peut le trouver.

Le wiki CMake contient des instructions plus détaillées sur https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/Packaging

11
Triskeldeian