Corso di C con Linux

Il Gnu Make

 

Il Gnu Make

Durante lo sviluppo di un programma, generalmente si applica il principio di programmazione top-down, suddividendolo in sottoprogrammi, che possono essere posti in file differenti per migliorare la manutenzione del codice stesso. L'utility make presente nei diversi tipi di Unix, viene incontro a questa necessità offrendo uno strumento efficiente per la compilazione separata.

 

Che cosa fa make?

L'utility make determina automaticamente quali parti di codice di un programma di varie dimensioni devono essere ricompilati, ed esegue i comandi necessari alla ricompilazione. Per poter usare make, dovete scrivere un file, chiamato makefile che descriva le relazioni tra i file nel vostro programma e fornisca i comandi necessari per aggiornare ciascun file. In un programma, tipicamente, il file eseguibile é aggiornato dai file oggetto, che sono creati mediante la compilazione dei file sorgente. Generalmente parlando un programma può essere realizzato da un team di programmatori, che poi successivamente hanno il compito di riassemblare il tutto, ed é proprio questo che fa il make. Avendo creato un opportuno file di nome Makefile, per ricompilare il tutto, basta digitare dalla shell:

$ make

Oppure se avete creato un file make, con un vostro nome a piacimento, per ricompilare il tutto dovete, fare:

make -f nomefile

Una cosa importante da ricordare é la seguente: In ogni progetto, se un file header (*.h) é cambiato, ciascun sorgente C, che include l'header deve essere ricompilato. Stessa cosa, per ogni sorgente modificato. Ogni compilazione produce un file oggetto corrispondente al file sorgente. Infine, tutti i file oggetto devono essere di nuovo linkati assieme per produrre l'eseguibile, il make fa questo per voi.

Un semplice makefile.

Un semplice makefile é composto da un insieme di regole, con la seguente forma:

       target: dipendenze
       TASTO TAB comando
	         .......
                 .......

Un target é di solito il nome di un file, che é generato da un programma; esempi di file target sono i file eseguibili e i file oggetto.

Esistono inoltre dei nomi che hanno un significato speciale se appaiono come target, vediamone alcuni:

Target Speciali

Nome: .PHONY

Significato: Specifica un target phony, ovvero un target che non è realmente il nome di un file. È solo un nome per alcuni comandi che devono essere eseguiti, quando ne fate richiesta esplicita. Ci sono due ragioni per usare un target phony : evitare un conflitto con file dello stesso nome, e migliorare le prestazioni.

Nome: .SUFFIXES

Significato: Le dipendenze di un target speciale .SUFFIXES, sono la lista dei suffissi che devono essere usati nel controllo delle regole dei suffissi.

Nome: .DEFAULT

Significato: I comandi specificati per .DEFAULT sono usati per ogni target per i quali non è stata trovata nessuna regola

Nome: .PRECIOUS

Significato: Il target .PRECIOUS permette di salvare i target dai quali dipende. Supponiamo, che durante l'esecuzione make venga interrotto da cause esterne, prima di uscire make elimina i file, che ha creato. Se specifichiamo .PRECIOUS, i target dai quali dipende non vengono eliminati

Una dipendenza é un file che viene usato come input per creare il target. Un target spesso dipende da diversi file.

Un comando é un azione da compiere. Una regola può essere composta da più di un comando, su una linea.
Notate Attentamente: Si deve mettere un carattere TAB all'inizio di ogni linea di comando, per far sì che il make legga la linea in maniera corretta.

Una regola spiega come e quando fare il make di dati file, che sono i target della data linea.

 

Torna all'indice Generale del corso di Corso di C con Linux di Software Planet