2010-03-27 13 views

risposta

60

In genere lo script di configurazione quando RUN:

  • Controlla alcuni dettagli circa la macchina su cui il software sta per essere installato . Questo script controlla le dipendenze sul tuo sistema. Per il software specifico che funziona correttamente , potrebbe essere necessario molto di cose esistenti sulla macchina già esistente. Se nel sistema manca uno dei principali requisiti, lo script di configurazione è exit e non è possibile procedere con l'installazione finché non si ottengono le informazioni necessarie.

  • Creare il Makefile da utilizzare nel passaggio successivo.

+3

Mai sapere che makefile è stato creato da configure before :) – Mask

+2

Fornisce anche un'interfaccia per configurare (correttamente) le opzioni di compilazione. './configure --help' fornirà (di solito?) un elenco di opzioni disponibili. – intuited

+0

voto per il dettaglio makefile – jayatubi

5

Uno script di configurazione crea il Makefile da un modello, sostituendo nelle cose come dove si desidera installare il codice e quello che le definizioni sono necessarie per il (C, C++, Fortran, ...) compilatore che viene utilizzato per costruire il programma. In teoria, tutto potrebbe essere fatto in un solo passaggio, tranne per il fatto che ci sono molte diverse configurazioni possibili che è più facile da fare a tappe. Ad esempio, se si sta creando un programma di grandi dimensioni con una macchina multi-core, è possibile specificare che si verifichi un certo numero di compilazioni parallele, il che non riguarda il modo in cui sono configurate le cose.

32

Esegue un script che tipicamente produce makefile e "configure.h".

Lo script è scritto nella lingua "m4" che è un linguaggio macro. Le macro di livello superiore si trovano in autoconf.ac o (nei sistemi precedenti) autoconf.in. Questi espandono contenenti macro di livello inferiore che a loro volta si espandono in veri e propri test che creano piccoli programmi o attività per verificare quale tipo di sistema hai.

Per esempio AC_CHECK_HEADER ([myheader.h], ...) potrebbe generare un piccolo programma C come:

#include "myheader.h" 
int main(int argc, char** argv) { 
    return 0; 
} 

Se il programma viene compilato, è considerato il controllo "di passaggio", altrimenti "non riesce" . Lo stato di tali controlli si riflette spesso nel file config.h. Su un controllo di passaggio, si potrebbe trovare una linea in config.h che assomiglia:

#define HAVE_MYHEADER_H 1 

mentre su un test che non riesce, potrebbe assomigliare

#define HAVE_MYHEADER_H 0 

Se configurato per lavorare con autoconf in AM_INIT_AUTOMAKE macro, il Makefile può anche fare riferimento ai risultati dei test se la variabile contenente il risultato del test viene esportata. Quindi se una libreria necessaria si trova in alcune posizioni tipiche diverse, o la sintassi di "ciò che funziona" con uno dei tuoi strumenti standard (come tar, ar, ecc) è diversa, o lo strumento preferito non è disponibile, il Makefile sarà in grado di creare correttamente il progetto utilizzando le diverse posizioni della libreria, la diversa sintassi dello strumento o un diverso set di strumenti.

Quindi, quando si ha a che fare con un progetto Autotools (configure/make/make install) il Makefile in realtà non contiene tutto il necessario per costruire il progetto, è generato dal modello Makefile.in per adattarsi specificatamente al sistema quando si digita " configurare".

+0

Ho notato che questi file 'configure' sono estremamente grandi, sono scritti manualmente? – Mask

+10

No, lo script configure è un'espansione (che utilizza anche il linguaggio m4) di direttive che vengono inserite nel file configure.ac (o nei sistemi precedenti configure.in). L'esecuzione di autoconf genererà lo script configure da configure.ac, ma a volte è necessario correggere le librerie macro. Quando è necessario, eseguire aclocal e tenterà di verificare che tutte le macro siano definite correttamente (e utilizzabili per la successiva esecuzione di autoconf). –

+0

@Edwin Buck: ottima risposta! – Lazer