Porque cada etapa faz coisas diferentes
Prepare (configure) o ambiente para a construção
./configure
Este script possui muitas opções que você deve alterar. Gostar --prefix
ou --with-dir=/foo
. Isso significa que cada sistema possui uma configuração diferente. Também ./configure
verifica se há bibliotecas ausentes que devem ser instaladas. Qualquer coisa errada aqui faz com que não construa seu aplicativo . É por isso que as distros têm pacotes que são instalados em locais diferentes, porque toda distro pensa que é melhor instalar certas bibliotecas e arquivos em certos diretórios. Diz-se que corre./configure
, mas na verdade você deve alterá-lo sempre.
Por exemplo, dê uma olhada no site de pacotes do Arch Linux . Aqui você verá que qualquer pacote usa um parâmetro de configuração diferente (suponha que eles estejam usando autotools para o sistema de compilação).
Construindo o sistema
make
Isso é na verdade make all
por padrão. E cada marca tem diferentes ações a realizar. Alguns fazem a construção, alguns fazem testes após a construção, alguns fazem check-out de repositórios SCM externos. Normalmente você não precisa fornecer nenhum parâmetro, mas, novamente, alguns pacotes os executam de maneira diferente.
Instale no sistema
make install
Isso instala o pacote no local especificado com configure. Se desejar, você pode especificar ./configure
para apontar para seu diretório inicial. No entanto, muitas opções de configuração estão apontando para /usr
ou /usr/local
. Isso significa que você terá que usar de fato sudo make install
porque apenas o root pode copiar arquivos para / usr e / usr / local.
Agora você vê que cada etapa é um pré-requisito para a próxima etapa. Cada etapa é uma preparação para fazer as coisas funcionarem em um fluxo sem problemas. As distros usam essa metáfora para construir pacotes (como RPM, deb, etc.).
Aqui você verá que cada etapa é, na verdade, um estado diferente. É por isso que os gerenciadores de pacotes têm wrappers diferentes. Abaixo está um exemplo de um invólucro que permite construir todo o pacote em uma etapa. Mas lembre-se de que cada aplicativo tem um wrapper diferente (na verdade, esses wrappers têm um nome 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
Aqui pode-se usar autotools, ou seja ./configure
, make
e make install
. Mas outro pode usar SCons, configuração relacionada ao Python ou algo diferente.
Como você pode ver, a divisão de cada estado torna as coisas muito mais fáceis de manutenção e implantação, especialmente para mantenedores de pacotes e distribuições.