Scrivere Un Makefile

Make è uno strumento Unix progettato per avviare l’esecuzione di un makefile, facilitandoti il processo di compilazione. Supponiamo per esempio di avere più file sorgenti su cui dover eseguire alcuni comandi di compilazione in un determinato ordine. Eseguire tutti i comandi di compilazione ogni volta si vuole aggiornare il binario richiede molta fatica, con il rischio di trovarsi dei file oggetto obsoleto.

La soluzione è adottare lo strumento make che cercherà di eseguire passo passo un preciso schema di compilazione, basandosi su makefile, file speciali che contengono regole per la compilazione. Mentre sei nella directory contenente questo makefile, digiterai make e i comandi nel makefile verranno eseguiti. Se crei più di un makefile, assicurati di essere nella directory corretta prima di digitare make.

Make tiene traccia dell’ultima volta che i file (normalmente file oggetto) sono stati aggiornati e aggiorna solo i file necessari (quelli che contengono modifiche) per mantenere aggiornato il file sorgente. Se si dispone di un programma di grandi dimensioni con molti file sorgente e/o intestazione, quando si modifica un file da cui altri dipendono, è necessario ricompilare tutti i file dipendenti. Senza un makefile, questo è un compito estremamente dispendioso in termini di tempo.

Poiché un makefile è un elenco di comandi di shell, deve essere scritto per la shell che elaborerà il makefile. Un makefile che funziona bene in una shell potrebbe non essere eseguito correttamente in un’altra shell.

Il makefile contiene un elenco di regole. Queste regole dicono al sistema quali comandi vuoi che vengano eseguiti. La maggior parte delle volte, queste regole sono comandi per compilare (o ricompilare) una serie di file. Le regole, che devono iniziare nella colonna 1, sono in due parti. La prima riga è chiamata riga di dipendenza e le righe successive vengono chiamate righe di azioni o comandi.

REGOLA:	LINEA DI DIPENDENZA
[TAB] LINEA(E) DI AZIONE
È obbligatorio includere un carattere di tabulazione prima della linea di azione.

La linea di dipendenza è composta da due parti. La prima parte (prima dei due punti) sono i file di destinazione e la seconda parte (dopo i due punti) sono chiamati file di origine. Si chiama linea di dipendenza perché la prima parte dipende dalla seconda. Più file di destinazione devono essere separati da uno spazio. Anche più file di origine devono essere separati da uno spazio.

LINEA DI DIPENDENZA: 
	FILE DI DESTINAZIONE :	FILE SORGENTI

Dopo che il makefile è stato creato, un programma può essere (ri)compilato digitando il comando make nella directory corretta. Make quindi legge il makefile e crea un albero delle dipendenze e intraprende qualsiasi azione necessaria. Non eseguirà necessariamente tutte le regole nel makefile poiché potrebbe non essere necessario aggiornare tutte le dipendenze. Ricostruirà i file di destinazione se mancano o sono più vecchi dei file di dipendenza.

Se non diversamente indicato, make si interromperà quando rileva un errore durante il processo di costruzione.