Je veux générer un fichier Makefile avec la cible d’installation, ce qui rend l’installation dans / usr au lieu de / usr / local par défaut. En supposant que ce répertoire de compilation est fait dans le sous-répertoire source, j’exécute:
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
CMakeCache.txt contient: CMAKE_INSTALL_PREFIX:PATH=/usr
(OK?)
Maintenant j’exécute:
faire faire installer
Tous les fichiers sont toujours installés sur usr / local. Qu’est-ce qui ne va pas?
Modifier: il n’y a pas de CMAKE_INSTALL_PREFIX dans les fichiers de projet CMakeLists.txt. Avant de lancer cmake, je supprime tout dans le répertoire de sortie. les directives d’installation de CMakeLists.txt ressemblent à:
install(TARGETS mylibrary DESTINATION lib)
Cela devrait être (voir les docs ):
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
Il y a deux façons d’utiliser cette variable:
le passer comme argument de ligne de commande comme Job mentionné:
cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..
lui atsortingbuer une valeur dans CMakeLists.txt
:
SET(CMAKE_INSTALL_PREFIX < install_path >)
Mais rappelez-vous de placer la commande BEFORE PROJECT(< project_name>)
, sinon cela ne fonctionnera pas!
Mais rappelez-vous de placer la commande BEFORE PROJECT (
), sinon cela ne fonctionnera pas!
Ma première semaine d’utilisation de cmake – après quelques années d’autotools GNU – je continue donc d’apprendre (mieux que d’écrire des macros M4), mais je pense que la modification de CMAKE_INSTALL_PREFIX après la définition du projet est le meilleur endroit.
CMakeLists.txt
cmake_minimum_required (VERSION 2.8) set (CMAKE_INSTALL_PREFIX /foo/bar/bubba) message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba") project (BarkBark) message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba") set (CMAKE_INSTALL_PREFIX /foo/bar/bubba) message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")
Première exécution (pas de cache)
CIP = /foo/bar/bubba (should be /foo/bar/bubba -- The C comstackr identification is GNU 4.4.7 -- etc, etc,... CIP = /usr/local (should be /foo/bar/bubba CIP = /foo/bar/bubba (should be /foo/bar/bubba -- Configuring done -- Generating done
Deuxième tour
CIP = /foo/bar/bubba (should be /foo/bar/bubba CIP = /foo/bar/bubba (should be /foo/bar/bubba CIP = /foo/bar/bubba (should be /foo/bar/bubba -- Configuring done -- Generating done
Faites-moi savoir si je me trompe, j’ai beaucoup à apprendre à faire. C’est marrant.