Parce que chaque étape fait des choses différentes
Préparer (configurer) l'environnement pour la construction
./configure
Ce script a beaucoup d'options que vous devriez changer. Comme --prefix
ou --with-dir=/foo
. Cela signifie que chaque système a une configuration différente. ./configure
Vérifie également les bibliothèques manquantes qui doivent être installées. Tout problème ici empêche la création de votre application . C'est pourquoi les distributions ont des packages installés à des endroits différents, car chaque distribution pense qu'il est préférable d'installer certaines bibliothèques et certains fichiers dans certains répertoires. On dit qu'il fonctionne ./configure
, mais en fait, vous devriez toujours le changer.
Par exemple, jetez un œil au site des packages Arch Linux . Ici, vous verrez que tout package utilise un paramètre de configuration différent (supposons qu'ils utilisent des outils automatiques pour le système de construction).
Construire le système
make
C'est en fait make all
par défaut. Et chaque marque a des actions différentes à faire. Certains font la construction, certains font des tests après la construction, certains font l'extraction à partir de référentiels SCM externes. Habituellement, vous n'avez pas à donner de paramètres, mais encore une fois, certains packages les exécutent différemment.
Installer sur le système
make install
Cela installe le package à l'emplacement spécifié avec configure. Si vous le souhaitez, vous pouvez spécifier ./configure
de pointer vers votre répertoire de base. Cependant, de nombreuses options de configuration pointent vers /usr
ou /usr/local
. Cela signifie que vous devez utiliser réellement sudo make install
parce que seul root peut copier des fichiers vers / usr et / usr / local.
Vous voyez maintenant que chaque étape est une condition préalable à l'étape suivante. Chaque étape est une préparation pour faire fonctionner les choses dans un flux sans problème. Les distributions utilisent cette métaphore pour construire des packages (comme RPM, deb, etc.).
Ici, vous verrez que chaque étape est en fait un état différent. C'est pourquoi les gestionnaires de packages ont des wrappers différents. Vous trouverez ci-dessous un exemple de wrapper qui vous permet de créer l'ensemble du package en une seule étape. Mais rappelez-vous que chaque application a un wrapper différent (en fait, ces wrappers ont un nom comme spec, PKGBUILD, etc.):
def setup:
... #use ./configure if autotools is used
def build:
... #use make if autotools is used
def install:
... #use make all if autotools is used
Ici , on peut utiliser autotools, cela signifie que ./configure
, make
et make install
. Mais un autre peut utiliser des SCons, une configuration liée à Python ou quelque chose de différent.
Comme vous le voyez, le fractionnement de chaque état facilite grandement la maintenance et le déploiement, en particulier pour les mainteneurs de paquets et les distributions.