Perché ogni passaggio fa cose diverse
Preparare (configurazione) l'ambiente per la costruzione
./configure
Questo script ha molte opzioni che dovresti modificare. Come --prefix
o --with-dir=/foo
. Ciò significa che ogni sistema ha una configurazione diversa. ./configure
Controlla anche le librerie mancanti che dovrebbero essere installate. Qualcosa di sbagliato qui fa sì che non crei la tua applicazione . Ecco perché le distribuzioni hanno pacchetti installati in luoghi diversi, perché ogni distribuzione pensa che sia meglio installare determinate librerie e file in determinate directory. Si dice che funzioni ./configure
, ma in realtà dovresti cambiarlo sempre.
Ad esempio, dai un'occhiata al sito dei pacchetti di Arch Linux . Qui vedrai che ogni pacchetto utilizza un parametro di configurazione diverso (supponiamo che stia usando autotools per il sistema di compilazione).
Costruire il sistema
make
Questo è in realtà make all
per impostazione predefinita. E ogni marca ha azioni diverse da fare. Alcuni compilano, altri eseguono test dopo la compilazione, altri eseguono il checkout da repository SCM esterni. Di solito non è necessario fornire alcun parametro, ma di nuovo alcuni pacchetti li eseguono in modo diverso.
Installa nel sistema
make install
Questo installa il pacchetto nella posizione specificata con configure. Se vuoi puoi specificare ./configure
di puntare alla tua directory home. Tuttavia, molte opzioni di configurazione puntano a /usr
o /usr/local
. Ciò significa che devi usare effettivamente sudo make install
perché solo root può copiare file in / usr e / usr / local.
Ora vedi che ogni passaggio è un prerequisito per il passaggio successivo. Ogni passaggio è una preparazione per far funzionare le cose in un flusso senza problemi. Le distribuzioni usano questa metafora per creare pacchetti (come RPM, deb, ecc.).
Qui vedrai che ogni passaggio è in realtà uno stato diverso. Ecco perché i gestori di pacchetti hanno wrapper diversi. Di seguito è riportato un esempio di wrapper che consente di creare l'intero pacchetto in un unico passaggio. Ma ricorda che ogni applicazione ha un wrapper diverso (in realtà questi wrapper hanno un nome come spec, PKGBUILD, ecc.):
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
Qui si possono usare autotools, che significa ./configure
, make
e make install
. Ma un altro può usare SCons, impostazioni relative a Python o qualcosa di diverso.
Come puoi vedere, la divisione di ogni stato rende le cose molto più semplici per la manutenzione e la distribuzione, specialmente per i manutentori e le distribuzioni dei pacchetti.