Porque cada paso hace cosas diferentes
Preparar (configurar) el entorno para la construcción
./configure
Este script tiene muchas opciones que debe cambiar. Me gusta --prefix
o --with-dir=/foo
. Eso significa que cada sistema tiene una configuración diferente. También ./configure
comprueba si faltan bibliotecas que deberían instalarse. Cualquier error aquí hace que no se cree la aplicación . Es por eso que las distribuciones tienen paquetes que se instalan en diferentes lugares, porque cada distribución cree que es mejor instalar ciertas bibliotecas y archivos en ciertos directorios. Se dice que corre./configure
, pero de hecho debes cambiarlo siempre.
Por ejemplo, eche un vistazo al sitio de paquetes de Arch Linux . Aquí verá que cualquier paquete usa un parámetro de configuración diferente (suponga que están usando autotools para el sistema de compilación).
Construyendo el sistema
make
En realidad, esto es make all
por defecto. Y cada marca tiene diferentes acciones que realizar. Algunos construyen, otros hacen pruebas después de compilar, algunos hacen checkout desde repositorios SCM externos. Por lo general, no es necesario que proporcione ningún parámetro, pero nuevamente algunos paquetes los ejecutan de manera diferente.
Instalar en el sistema
make install
Esto instala el paquete en el lugar especificado con configure. Si lo desea, puede especificar ./configure
que apunte a su directorio de inicio. Sin embargo, muchas opciones de configuración apuntan a /usr
o /usr/local
. Eso significa que tienes que usar realmentesudo make install
porque solo el root puede copiar archivos en / usr y / usr / local.
Ahora ve que cada paso es un requisito previo para el siguiente. Cada paso es una preparación para hacer que las cosas funcionen sin problemas. Las distribuciones utilizan esta metáfora para crear paquetes (como RPM, deb, etc.).
Aquí verá que cada paso es en realidad un estado diferente. Es por eso que los administradores de paquetes tienen diferentes envoltorios. A continuación se muestra un ejemplo de un contenedor que le permite crear todo el paquete en un solo paso. Pero recuerde que cada aplicación tiene un contenedor diferente (en realidad, estos contenedores tienen un nombre como 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
Aquí uno puede usar autotools, es decir ./configure
, make
y make install
. Pero otro puede usar SCons, configuración relacionada con Python o algo diferente.
Como puede ver, dividir cada estado facilita mucho el mantenimiento y la implementación, especialmente para los mantenedores de paquetes y las distribuciones.