Donc, je viens d'avoir une question simple qui va probablement me faire paraître stupide, mais j'apprends
Quand je fais un
./configure --prefix/usr/bin/
Que fait le préfixe? Est-ce simplement installer le paquet à cet endroit?
Et une réponse peut-elle donner une réponse plus élaborée pour une installation compliquée et expliquer en détail les préfixes et les options qui vont avec.
Si je devais lancer une installation d’apt-get, comment l’installerais-je à un certain emplacement avec le préfixe
J'ai aussi vu
PREFIX=/tmp/installdir make
PREFIX=/tmp/installdir make install
Si le préfixe est appelé dans ./configure, pourquoi est-il toujours créé dans ces deux exemples?
Merci d'avance!
Lorsque vous installez un logiciel avec make install
ou Sudo make install
, différents fichiers sont placés dans des répertoires différents. Les exécutables qui fournissent les commandes que l'utilisateur est censé exécuter vont généralement dans un répertoire bin
, les bibliothèques dans un répertoire lib
, les pages de manuel dans un répertoire man
, etc.
Lorsque vous exécutez ./configure
, , l'option --prefix
vous permet de spécifier où ces répertoires sont . Il s'appelle --prefix
car il vous permet d'indiquer le préfixe qui apparaît dans les chemins d'accès à chacun des répertoires dans lesquels les fichiers du programme ou de la bibliothèque que vous créez doivent être installés. La plupart des scripts configure
prennent en charge --prefix
, et leur omission et la simple exécution de ./configure
équivaut généralement à ./configure --prefix=/usr/local
.
Pour répondre plus complètement à cette question, j'ai reproduit deux sections de ma réponse à Comment installer le fichier tar "globalement"? (sur nix & Linux =), qui abordent spécifiquement cette question:
Configurer votre build
Lorsque vous avez un code source compilé en exécutant
./configure
etmake
, vous utiliserez généralementmake install
(ouSudo make install
) pour l’installer. Cela copie les fichiers du répertoire de construction dans l’emplacement d’installation. Lorsque la chose que vous installez fournit des commandes exécutables, ces derniers sont généralement copiés dans un répertoire qui se trouve dans$PATH
ou que vous devriez envisager d’ajouter à$PATH
.Bien que la création et l’installation de logiciels soient souvent aussi simples que l’exécution de
./configure
,make
, parfois demake check
ou demake test
, puis demake install
ou deSudo make install
, vous souhaiterez parfois passer des options au scriptconfigure
pour configurer le build. En particulier, comme dit pfnuesel , voici comment vous configurez où le logiciel va être installé. Même si l'étapemake install
installe réellement le logiciel, les emplacements où tout sera installé sont généralement définis à l'étape./configure
.L'option la plus courante pour cela est
--prefix
. Le préfixe par défaut, lorsque vous ne dites pas quoi utiliser àconfigure
, est généralement/usr/local
. (Parfois, le code source d'un programme ou d'une bibliothèque utilise par défaut un autre préfixe. Heureusement, cela est rare.)Donc,
./configure
est généralement équivalent à./configure --prefix=/usr/local
. Pour installer un logiciel dans votre répertoire personnel, vous pouvez utiliser./configure --prefix=/home/galahad
(si/home/galahad
est votre répertoire personnel) ou--prefix="$HOME"
. Ensuite, bien sûr, vous devez toujours créer et installer le logiciel avecmake
. Je dois dire que tous les logiciels distribués sous forme de code source ne sont pas conçus de cette manière. Vous devriez toujours chercher de la documentation dans l'archive de code source extraite.Que signifie
--prefix
Lorsque vous exécutez
./configure --prefix=directory
, vous indiquez que le logiciel doit être installé dans le répertoiredirectory
. Mais cela place rarement, si jamais, les fichiers volants dansdirectory
. Au lieu de cela, il place les fichiers qui servent différents objectifs dans les différents sous-répertoires dedirectory
. Si ces sous-répertoires n'existent pas, il les crée.Les exécutables vont généralement dans
directory/bin
, bien qu’ils puissent aller dansdirectory/sbin
s’ils sont couramment utilisés pour l’administration système ou bien (plus rarement de nos jours) dansdirectory/games
s’ils sont des jeux. Les bibliothèques vont dansdirectory/lib
ou un autre répertoire du même nom commedirectory/lib32
. Les fichiers d'en-tête vont dansdirectory/include
. Les pages de manuel vont dansdirectory/man
. Les fichiers de données utilisés par le logiciel vont dansdirectory/share
.C'est ce que cela signifie pour
directory
d'être un préfixe . C'est le répertoire parent qui contient les emplacements dans lesquels différents fichiers seront installés. Il apparaît donc comme un préfixe dans le chemins absolus de la plupart des fichiers et répertoires créés en exécutantmake install
ouSudo make install
.Il y a quelques exceptions à cela. Les fichiers de configuration système, qui sont parfois créés lors de l’installation du logiciel qui les utilisera, mais pas toujours, sont généralement enregistrés dans
/etc
. Ceci n'est généralement pas affecté par la spécification d'un préfixe différent. Même si vous installez beaucoup de logiciels dans/usr/local
, il utilisera toujours principalement/etc
et votre répertoire/usr/local/etc
sera probablement inexistant, vide ou ne contiendra que très peu de fichiers.Sur de nombreux systèmes, vous pouvez trouver plus d'informations sur la disposition d'un système de fichiers typique en exécutant
man hier
. Si vous utilisez un système GNU/Linux, vous pouvez être intéressé par le norme de hiérarchie de système de fichiers .
Il indique l'emplacement des éléments nécessaires à la configuration du package ou du logiciel actuel.
Comme dans un cas simple, il peut indiquer l'emplacement des bibliothèques ssl:
--with-libssh2=/usr/local #used in configuring nagios
il indique également quels paquets ne doivent pas être configurés pour réaliser des compilations appropriées du programme en fonction de votre système:
--disable-shared # used in configuring nagios
--disable-link-balancer # used in configuring Firehol
Ce ne sont que des options supplémentaires pour faire une compilation adaptée à votre système. C'est ce que je pense. Corrigez-moi si c'est autre chose.
L'option --prefix=PREFIX
installe les fichiers indépendants de l'architecture dans PREFIX
. Lorsque vous exécutez une commande make install
, les bibliothèques sont placées dans le répertoire PREFIX/lib
, les exécutables dans le répertoire PREFIX/bin
et ainsi de suite.
Si cet argument n'est pas passé à la commande configure
, la valeur par défaut est /usr/local
.