2011-04-03 4 views
14

J'ai lib que j'ai installé à la main (à/usr/local) sur un système Linux (Eigen3, soit dit en passant). Il y a un FindEigen3.cmake fourni avec la lib mais qui n'est pas installé n'importe où par défaut.Quel est le bon endroit pour les fichiers FindXXX.cmake pour les bibliothèques compilées localement?

Il existe /usr/share/cmake-x.y/Modules où CMake recherche des modules supplémentaires, mais la mise en place de ces fichiers ne semble pas logique. Existe-t-il un emplacement équivalent sous/usr/local qui est également analysé par défaut? Ou quelle est la manière standard de créer des modules de bibliothèque personnalisés?

(Bien que la question ne soit pas strictement liée à la programmation, je pense que des auteurs de bibliothèques peuvent également rencontrer la même question de l'autre côté. Où placer ces fichiers lors de l'installation manuellement)

Répondre

6

Voir les commentaires dans la documentation CMake pour la commande "find_package":

http://cmake.org/cmake/help/v2.8.8/cmake.html#command:find_package

Il parle d'écrire un fichier "projet-config", et où l'installer, de sorte que find_package (Eigen3) fonctionnera sans avoir un module FindEigen3.cmake trouvé ... Il est verbeux, mais l'information est là.

Voir aussi l'utilisateur a contribué pages wiki comme celui-ci:

http://cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file

+0

bien que je n Pas le temps (dans les deux dernières semaines: P) de vérifier cela en action, c'était ce que je cherchais, merci! – Latanius

3

Vous devez définir la CMAKE_MODULE_PATH pour inclure le répertoire dans lequel se trouve le fichier FindEigen3.cmake avant d'appeler find_package. Je crois que:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} <your path>) 

fera l'affaire, mais je n'ai pas configuré pour vérifier que disponible pour le moment afin que vous pourriez avoir à masser cette technique un peu.

3

Dans notre projet, nous plaçons des modules FIndXXX.cmake dans le dossier racine projet dir/cmake/modules. Pour cela fonctionne, vous devez spécifier dans projet racine dir/CMakeLists.txt (similaire à ce que DLRdave a déjà dit):

set (CMAKE_MODULE_PATH $ {CMAKE_SOURCE_DIR}/cmake/modules)

Questions connexes