Corso di C con Linux

Il Gnu Make - esempio

 

Ora che abbiamo chiarito, nella scorsa puntata, questi concetti vediamo un semplice Makefile:

Esempio 2-1. Un semplice makefile
       # Semplice Makefile
       # Sysa Test
       #
       @echo Compilazione in corso
       sysa : main.o token.o mostra.o \
               ins.o matrix.o
               gcc -o sysa main.o token.o mostra.o \
                            ins.o matrix.o
       @echo Compilazione dei sottoprogrammi
       main.o   : main.c header1.h
                gcc -c main.c
       token.o  : token.c tokentype.h
                gcc -c token.c
       mostra.o : mostra.c header1.h
                gcc -c mostra.c
       ins.o    : ins.c tokentype.h
                gcc -c ins.c
       matrix.o : matrix.c header1.h 
                gcc -c matrix.c

       clean : rm sysa main.o token.o mostra.o ins.o \
                  matrix.o
       install: cp sysa /usr/bin/sysa

A questo punto che avete editato il vostro Makefile, con il vostro editor preferito per fare in modo che il make vi compili i differenti file, in un unico, fate:
       make
Se poi volete cancellare il tutto, fate make clean. Vediamo ora di spiegare a modo, come funziona il makefile. La prima cosa che si nota sono i commenti, che vengono posti dopo la #, il make ignora tutto ciò che appare dopo la # fino alla fine della linea. La seconda cosa sono i messaggi, che volete far apparire durante la compilazione, per far ciò si usa il comando :
@echo "Stringa che voglio far apparire"

Ora vediamo di distinguere tra target, dipendenze, e spiegare le diverse regole. Il file target principale, quello eseguibile dopo il make sarà sysa, che a sua volta dipende da n file oggetto, che vediamo subito dopo i due punti. Ciascuno di questi file oggetto, vengono compilati precedentemente e sono quindi essi stessi target e rispetto all'eseguibile sysa, dipendenze. Notate che la sequenza backslash-ritorno a capo (\), che suddivide alcune linee lunghe, é necessaria al fine della leggibilità del Makefile stesso.
Il comando, che compare sotto i due punti, gcc -c, é necessario al make al fine di eseguire la chiamata al compilatore per ottenere i relativi target-dipendenze.

Quando si vogliono ottenere i target é necessario specificare nel make tutte le possibili dipendenze, compresi gli header, per esempio:
       
       matrix.o : matrix.c header1.h

Questo significa, che il file oggetto matrix.o, dipende dal file matrix.c e dal file header1.h. Il file matrix.c andrà compilato, quindi si necessita di un comando che esegue tale operazione ed questo é:
gcc -c matrix.c
L'opzione -c serve, per evitare il linking automatico. Sono rimaste da spiegare le ultime righe. Il clean fa sì, che dopo che voi avete digitato make clean vengano cancellati i file binari li specificati ovvero : sysa, main.o, token.o, mostra.o, ins.o, matrix.o. La regola dopo il target install, copia il file appena compilato nella directory /usr/bin, dove un qualsiasi utente lo possa richiamare.

 

 

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