Programmare in C – Makefiles

Per realizzare un makefile si deve creare un file chiamato makefile ed editarlo con dei comandi per arrivare alla costruzione completa di un eseguibile.

Potrebbe essere noioso, ridondante e alquanto sciocco, digitare tutte le volte che si compila un programma o si manda in esecuzione un codice il comando gcc con tutte le librerie di cui un programma necessita. Tale operazione è particolarmente noiosa da ripetere ogni qual volta si debba apportare una qualsiasi modifica al codice. L'utilità make risolve questo tipo di incombenza. Si può utilizzare il seguente makefile per sostituire la compilazione così come descritta nella lezione precedente:

main: main.o util.o
        gcc -o main main.o util.o
main.o: main.c util.h
        gcc -c -g main.c
util.o: util.c util.h
        gcc -c -g util.c

Per realizzare il makefile si deve creare un file chiamato makefile ed editarlo con i comandi di cui sopra per arrivare alla costruzione completa di un eseguibile. Da notare che è necessario precedere tutte le linee gcc con un tab.

Il file makefile di cui sopra contiene due tipi di linee. Le linee che appaiono allineate a sinistra (per effetto della tabulazione) sono chiamate dependency lines, ovvero linee di dipendenza. Le linee precedute da un tab sono linee che contengono comandi eseguibili, che possono quindi contenere qualsiasi comando UNIX valido. Una linea di dipendenza dice che alcuni file sono dipendenti da altri nell'insieme di file che compongono il codice. Per esempio: main.o: main.c util.h equivale a dire che il file main.o è dipendente dai file main.c e util.h. Se uno o entrambi i file cambiano, sarà sufficiente rilanciare il makefile per ricreare main.o

Da notare che l'eseguibile finale che viene prodotto dal makefile è il main. Il risultato finale dovrebbe essere espresso sempre nella prima linea (linea 1) del makefile, in cui si dice anche che il file main è dipendente da main.o e util.o. Se vi sono cambiamenti, rieseguire il makefile per ricreare il file main.

E' possibile mettere linee multiple da eseguire al di sotto di una linea di dipendenza: devono tutte iniziare con un tab. Un programma “grande” può avere diverse librerie e un programma main. Il makefile ricompila automaticamente tutto ciò che serve in seguito a un cambiamento nel codice.

Se non state lavorando su di una macchina UNIX, il vostro compilatore ha sicuramente funzionalità equivalenti alla filosofia del makefile. Leggere pertanto la documentazione del compilatore in uso per imparare ad usarlo correttamente.

Ecco quindi spiegato il motivo per cui abbiamo incluso stdio.h nei programmi precedenti. E' semplicemente la libreria standard che qualcuno ha creato e reso disponibile agli altri programmatori per rendere ad essi la vita più facile.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend