web-dev-qa-db-fra.com

comment modifier le chemin d'installation sans exécuter à nouveau le script de configuration / cmake

Je travaille sur un projet qui prend beaucoup de temps à construire (10-15) minutes. J'ai recompilé pour vérifier s'il y a une erreur de compilation. Maintenant, je veux changer le répertoire d'installation afin d'avoir une nouvelle version de l'exécutable avec les nouvelles modifications. Existe-t-il une méthode pour simplement modifier le chemin d'installation afin que le "make install" s'installe vers un nouvel emplacement plutôt que l'ancien?

30
A. K.

Les makefiles générés par CMake prennent en charge la convention de codage DESTDIR pour les makefiles. Ainsi, vous pouvez remplacer l'emplacement d'installation par défaut en définissant la variable DESTDIR lors de l'appel de make:

$ make install DESTDIR=/opt/local

Il n'est pas nécessaire de relancer CMake.

45
sakra

Je ne sais pas si cela est généralement vrai, mais je peux donner un exemple d'une application pour laquelle la réponse acceptée par sakra ne fonctionne pas correctement. Si vous modifiez le répertoire d'installation en modifiant DESTDIR lors de l'installation d'ITK, il ajoutera simplement DESTDIR à son chemin d'installation déjà formé:

make install DESTDIR=/opt/local

[...]

-- Installing: /opt/local/usr/local/lib/cmake/ITK-4.4/WrapITK/Configuration/Typedefs/itkRenyiEntropy[...]

D'un autre côté, suivre cette réponse par Fraser donnera des chemins d'installation corrects sans recompilation:

cmake -DCMAKE_INSTALL_PREFIX=/opt/local /path/to/ITK_source
make install

[...]

-- Installing: /opt/local/lib/cmake/ITK-4.4/WrapITK/Configuration/Typedefs/itkRenyiEntropy[...]
17
kara deniz

Exécuter CMake avec -DCMAKE_INSTALL_PREFIX=<somewhere different to last time> ne devrait pas obliger votre projet à être recompilé. Si vous passez d'autres paramètres de ligne de commande à CMake, par exemple modifier les drapeaux du compilateur, qui serait forcer une reconstruction des cibles affectées, mais changer simplement le préfixe d'installation ne le fera pas.

13
Fraser

La définition canonique de DESTDIR et du préfixe est: les fichiers sont installés dans le préfixe $ DESTDIR $, mais préparés comme si leur emplacement d'installation final n'était que $ prefix.

Donc, DESTDIR est uniquement destiné aux personnes qui construisent des packages ou des tarballs de binaires; CMAKE_INSTALL_PREFIX est destiné à tous ceux qui souhaitent spécifier où les binaires créés doivent se trouver à la fin.

9
Dan Kegel

Au cas où quelqu'un n'utilise pas CMake, il existe une méthode pour le faire dans Makefile. Si vous avez un fichier Makefile.config généré dans votre répertoire de génération, recherchez le prefix. Ce prefix est l'installation path où les binaires/en-têtes, etc. seront installés. Changer cela installera les binaires/en-têtes dans le path modifié.

4
A. K.