Que fait 'make install'?

52

En passant de Windows à Linux, je suis incapable de comprendre le processus d'installation de logiciels sous Linux. Sous Windows, lorsque nous exécutons un fichier d'installation, celui-ci vous demande où vous souhaitez installer le programme, le plus probablement dans le dossier des fichiers de programme uniquement. Plus tard, il édite le registre. Ceci s'appelle l'installation sous Windows. Que signifie exactement "installer un logiciel" sous Linux?

Supposons que je télécharge le code source, le configure puis que je construise le binaire avec make. Maintenant, il s’agit d’un programme binaire, pas encore utilisable. Comment ça va être 'installé'? Par make install? Et que fait cette commande, exactement?

KawaiKx
la source
1
Ma réponse à stackoverflow.com/questions/528399/.. donne un bref aperçu des tâches habituelles effectuées par make installétapes du point de vue des programmeurs.
dmckee

Réponses:

44

Make est un programme de workflow à usage général, généralement utilisé pour la compilation. Mais il peut être utilisé pour n'importe quoi.

Lorsque vous faites quelque chose comme "make all", le programme make exécute une règle nommée "all" à partir d'un fichier du répertoire courant nommé "Makefile". Cette règle appelle généralement le compilateur pour compiler du code source en fichiers binaires.

Lorsque vous effectuez "make install", le programme make récupère les fichiers binaires de l'étape précédente et les copie dans des emplacements appropriés afin de pouvoir y accéder. Contrairement à Windows, l'installation nécessite simplement la copie de certaines bibliothèques et de certains exécutables et il n'y a aucune exigence de registre en tant que telle. En bref, "make install" copie simplement les fichiers compilés aux emplacements appropriés.

sharjeel
la source
4
Techniquement, le registre n'est pas une nécessité - ce que tous les installateurs ajoutent n'est qu'une fonction pratique, un peu comme la base de données du gestionnaire de paquets sous Linux, pour les personnes qui aiment pouvoir désinstaller des logiciels.
Grawity
2
@grawity En fait, sous Windows, il est nécessaire de modifier le registre pour de nombreuses raisons, telles que l'intégration. Sous Linux, l'intégration de logiciels les uns aux autres implique généralement la copie de fichiers ou l'ajout de lignes aux fichiers de configuration à l'aide d'un script de post-installation.
Camilo Martin
@sharjeel Il serait utile de dire comment je peux trouver la règle nommée alldans le Makefilemarqueur et à quoi ressemble le marqueur de fin de cette section, afin que je puisse voir où en est le traitement de la règle all.
Pro Backup
36

make installfait ce que l' Makefileauteur veut qu'il fasse. En règle générale, il est trop tard pour modifier le répertoire d'installation, comme il est souvent connu auparavant , lors de la construction. Les fichiers d'aide et les fichiers de configuration peuvent donc être référencés avec les noms de chemin corrects.

De nombreux projets utilisent les outils automatiques GNU pour essayer d'améliorer leur portabilité entre les différences de matériel et de système d'exploitation. (Différentes variantes d'Unix utilisent des en-têtes légèrement différents pour les déclarations de fonctions légèrement en dehors du chemin habituel, à l'exception de la plupart des programmes nécessitant l'un ou l'autre de ceux déclarés dans des emplacements différents.)

Lorsqu'un projet utilise les outils automatiques, le mantra normal à installer est le suivant:

./configure
make
make install

Le ./configurevous permet généralement d'utiliser une option de ligne de commande comme --prefix /opt/apacheou quelque chose de similaire pour spécifier un chemin différent. /usr/local/est un défaut commun prefix. Il est beaucoup plus facile pour un logiciel construit localement de vivre au même endroit et un logiciel fourni par la distribution que de vivre dans les "répertoires principaux":, /usr/ /bin/etc. (Les emballeurs font très attention à ne jamais toucher les fichiers /usr/local/- ils savent que c'est exclusivement pour les administrateurs système.)

Quoi qu'il en soit, la ./configure --prefix /path/to/new/prefixfixeront une variable dans la Makefilequi est disponible lors de la compilation du programme, la modification des pages de manuel afin qu'ils pointent vers les emplacements pour les fichiers, la modification des fichiers de configuration, etc. Ainsi makeconstruira le logiciel spécifiquement pour l'emplacement d' installation que vous voulez et make installl'installera à cet endroit.

La plupart des programmes peuvent être exécutés même sans la dernière make installétape - ils ./program_nameseront souvent démarrés. C’est définitivement une affaire de projet - certaines, comme postfix, qmailetc., sont composées de nombreux éléments en mouvement et reposent sur leur collaboration. D'autres, comme lsou supourraient être assez autonomes pour s'exécuter correctement à partir du répertoire dans lequel ils ont été construits. (Ce n'est pas souvent utile - mais parfois très utile.)

Cependant, tous les projets n'utilisent pas les outils automatiques: ils sont énormes , compliqués et difficiles à maintenir. Les écritures manuscrites Makefilesont beaucoup plus simples à écrire, et je pense personnellement que le simple fait de distribuer une Makefilevariable simple avec des variables de configuration disponibles est beaucoup plus facile pour les développeurs et les utilisateurs. (Bien que le ./configure ; make ; make installmantra soit vraiment facile pour les utilisateurs quand cela fonctionne.)

sarnold
la source
19

make installne fait rien de moins que l’exécution de la installfonction / section dans votreMakefile

sascha
la source
Bon, il aime juste make clean, fondamentalement, il exécute simplement les codes de la section.
Wulfric Lee
8

La chose la plus importante à mentionner en ce qui concerne l’installation de logiciels sur Linux est qu’il est beaucoup plus fiable et facile d’installer des logiciels à partir de votre distribution (c’est le but!). Utilisez uniquement make installs'il n'y a pas d'autre moyen (envisagez également des programmes alternatifs).

L’erreur commune des utilisateurs Windows est de télécharger des programmes de différents endroits et d’essayer de les installer, en oubliant de consulter leurs packages de distribution, qui pourraient être installés en un seul clic ou en utilisant une commande (dans le gestionnaire de packages).

N'oubliez pas non plus que l'une des principales raisons de l'absence d'infections virales sous Linux est que le logiciel est (ou devrait être) installé à partir de l'emplacement central (de confiance) au lieu de nombreux sites aléatoires.

En outre, bien que les distributions comme Ubuntu contiennent toujours des paquets obsolètes, il existe également des distributions comme Arch Linux toujours à jour (bien qu’elles ne proposent pas littéralement tous les programmes jamais publiés pour Linux, comme Debian / Ubuntu).

En ce qui concerne ce qui se passerait exactement lorsque vous utilisiez le gestionnaire de paquets, il vérifierait les dépendances, téléchargerait les paquets, décompresserait, mettrait tous les fichiers dans leurs répertoires appropriés, selon les directives de FHS et de la distribution, ainsi que certaines autres routines que vous pourriez probablement connaître. depuis la page de manuel du gestionnaire de paquets.

corvinus
la source