web-dev-qa-db-fra.com

Que fait 'make install'?

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. C'est ce qu'on 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 à l'aide de 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?

47
KawaiKx

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 extrait 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.

42
sharjeel

make install fait ce que l'auteur de Makefile souhaite faire. En règle générale, il est trop tard pour modifier le répertoire d'installation, comme il est souvent connu plus tôt , lors de la construction, de sorte que les fichiers d'aide et les fichiers de configuration peuvent ê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 à des emplacements différents.)

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

./configure
make
make install

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

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

La plupart des programmes peuvent être exécutés même sans l'étape finale make install. Seulement ./program_name les démarrera souvent. C’est définitivement une affaire de projet - certaines, comme postfix, qmail, etc., sont composées de nombreux éléments différents en mouvement et reposent sur leur collaboration. D'autres, comme ls ou su peuvent être suffisamment 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 misérables à maintenir. Les Makefiles écrits à la main sont beaucoup plus simples à écrire, et je pense personnellement que le simple fait de distribuer un simple Makefile avec les variables de configuration disponibles est beaucoup plus facile pour les développeurs et les utilisateurs. (Bien que le mantra ./configure ; make ; make install soit vraiment facile pour les utilisateurs quand cela fonctionne.)

35
sarnold

make install ne fait rien de moins que d'exécuter la fonction/section install dans votre Makefile

17
sascha

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 install s'il n'y a pas d'autre moyen (envisagez également d'autres programmes).

L'erreur commune des utilisateurs Windows est de télécharger des programmes depuis 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, conformément aux directives de FHS et de la distribution, ainsi qu'à certaines autres routines que vous pourriez probablement connaître depuis la page de manuel du gestionnaire de paquets.

8
corvinus