Faire l'installation, mais pas dans les répertoires par défaut?

148

Je veux lancer 'make install' pour avoir tout ce dont j'ai besoin, mais j'aimerais qu'il installe les choses dans leur propre dossier par opposition à / usr / bin du système, etc. est-ce possible? même s'il fait référence à des outils dans / usr / bin etc.?

Jon Phenow
la source
3
Si vous avez déjà construit le projet et que vous avez exécuté ./configure sans préfixe et que vous souhaitez l'installer dans un chemin personnalisé, voir stackoverflow.com/a/17679654/313113
bitek

Réponses:

213

Cela dépend du paquet. Si le Makefile est généré par GNU autotools ( ./configure), vous pouvez généralement définir l'emplacement cible comme suit:

./configure --prefix=/somewhere/else/than/usr/local

Si le Makefile n'est pas généré par les autotools, mais distribué avec le logiciel, ouvrez-le simplement dans un éditeur et modifiez-le. Le répertoire cible de l'installation est probablement défini dans une variable quelque part.

Thomas
la source
9
ne devrait pas make && make installsuivre la clause configure?
nass
1
Le problème que j'ai avec --prefixest que si vous exécutez un stringssur le binaire résultant par la suite, vous voyez que le chemin est stocké à l'intérieur. Je ne sais pas pourquoi cela se produit, mais je ne veux certainement pas que les chemins de ma machine soient sur des binaires que j'expédie à d'autres utilisateurs.
Erik Aigner le
Erik, il semble qu'il y aura de toute façon des références au chemin que vous exécutez make, si vous construisez à partir des sources.
Konstantin Rybakov le
44

Puisque vous ne savez pas quelle version d'automake vous pouvez utiliser la variable d'environnement DESTDIR .
Voir Makefile pour être sûr.

Par exemple:

 export DESTDIR="$HOME/Software/LocalInstall" && make -j4 install
Andor
la source
9
Cela fonctionne lorsque vous avez exécuté configure sans l'argument de ligne de commande --prefix et que vous avez déjà construit le projet mais que vous ne voulez pas l'installer dans les emplacements par défaut, mais spécifiez à la place un chemin d'installation personnalisé. Cela ajoutera le chemin par défaut usr / local / bin / au DESTDIR et votre projet sera installé dans $ HOME / Software / LocalInstall / usr / local / bin /
bitek
C'est une solution brillante. Je ne sais pas pourquoi ce n'est pas la réponse choisie! Presque toutes les autres réponses demandent à reconfigurer, ce qui signifie qu'il faut également refaire. Imaginez avoir compilé après 2 à 3 heures l'intégralité du superbuild MITK et qu'on vous demande ensuite de le refaire, simplement parce que je veux installer les fichiers compilés à un emplacement différent. Ceci est un merveilleux travail pour éviter cette situation.
Duck Dodgers
23
make DESTDIR=./new/customized/path install

Cette commande rapide a fonctionné pour moi pour l'installation d'opencv version 3.2.0 sur Ubuntu 16. Le chemin DESTDIR peut être relatif aussi bien qu'absolu.

Une telle redirection peut également être utile dans le cas où l'utilisateur n'a pas de privilèges d'administrateur tant que l'emplacement DESTDIR a le droit d'accès pour l'utilisateur. par exemple / home //

samasat
la source
1
peut également avoir besoin de remplacer PREFIX s'il a une valeur par défaut dans le makefile
Mark Ch
17

Cela peut dépendre de ce qui est pris en charge par le module que vous essayez de compiler. Si votre makefile est généré à l'aide d'autotools, utilisez:

--prefix=<myinstalldir>

lors de l'exécution de ./configure

certains packages vous permettent également de remplacer lors de l'exécution:

make prefix=<myinstalldir>

cependant, si vous n'utilisez pas ./configure, le seul moyen d'en être sûr est d'ouvrir le fichier makefile et de vérifier. Ce devrait être l'une des premières variables en haut.

Arbre77
la source
3
vous devez également savoir que cela make prefix=...peut entraîner des binaires avec de mauvais chemins codés en dur, car ceux-ci ne peuvent généralement pas être modifiés après./configure --prefix=...
Tobias Kienzler
0

J'ai essayé les solutions ci-dessus. Aucun n'a fonctionné.

À la fin, j'ai ouvert le fichier Makefile et changé manuellement le chemin du préfixe vers le chemin d'installation souhaité comme ci-dessous.

PREFIX ?= "installation path"

Quand j'ai essayé --prefix, "make" s'est plaint qu'il n'y avait pas une telle entrée de commande. Cependant, peut-être que certains paquets acceptent --prefix qui est bien sûr une solution plus propre.

Majid Azimi
la source
1
l' --prefixoption est à ./configurelaquelle vous appelez AVANT make.
Gus
-7

essayez d'utiliser INSTALL_ROOT.

make install INSTALL_ROOT=$INSTALL_DIRECTORY
Christophe
la source
11
Ne suggérez pas aux gens «d'essayer» quelque chose sans aucune information corroborante.
RichieHH
Cela devrait être un commentaire.
EJoshuaS