| prof.
Nunzio Brugaletta |
Sviluppo
in C++: strumenti in ambiente Linux |
La capacità di GNU Make di usare e gestire, nelle righe di comando, variabili che possono anche fare riferimento a variabili di ambiente, aumenta notevolmente la flessibilità e la velocità di gestione dei progetti, che consente il Makefile.
A titolo di esempio si vedrà come si possano controllare i flag di compilazione di un progetto, per aggiungere o togliere informazioni per il debugging, senza essere costretti a modificare ogni volta il Makefile, ma, molto più semplicemente, invocando make con parametri diversi.
Per prima cosa si modificano, nel Makefile, le righe di comando, in modo da poter utilizzare la variabile che serve:
...
c++ $(CFLAGS) -o prestiti prestiti.o c-libro.o
...
c++ $(CFLAGS) -c prestiti.cpp
...
c++ $(CFLAGS) -c c-libro.cpp
...
le variabili hanno un nome scelto dal programmatore, sono inserite fra parentesi e sono precedute dal simbolo $. Nell'esempio proposto controllando il contenuto della variabile, si è in grado di aggiungere il flag per il debugging. Il nome CFLAGS per la variabile è quello tradizionalmente utilizzato per specificare i flag di compilazione.
Si aggiunge, alla fine del Makefile, un nuovo obiettivo:
...
clean:
rm c-libro.o
rm prestiti.o
# fine Makefile
il raggiungimento di questo obiettivo comporta la rimozione dei file oggetto generati dalla compilazione (il flag -c). In questo modo, richiamando l'obiettivo, si ha la possibilità, cancellando gli oggetti, di ricompilare il progetto utilizzando flag diversi anche senza la necessità di modifica dei sorgenti. Si ricorda che se il timestamp non è modificato, i sorgenti non vengono ricompilati.
Il comando make, utilizzato da solo, si occupa del raggiungimento dell'obiettivo principale. Se invece viene invocato seguito dal nome di un obiettivo, salta direttamente a quello specificato. L'invocazione make clean, non essendoci prerequisiti, lancia l'esecuzione dei due comandi di rimozione associati all'obiettivo, dopodiché, make, termina il proprio lavoro.
Lanciando normalmente il comando make, viene eseguita una compilazione come se $(CFLAGS) non ci fosse. Ed, effettivamente, la variabile, non essendo definita né nel Makefile né nelle variabili di ambiente, non verrà sostituita da alcun valore.
|
|
Se, invece, si invoca make con il comando make CFLAGS=-g, si fa in modo di passare a make il valore della variabile indicata come opzione. Il nuovo valore sostituirà qualunque altro valore della stessa variabile sia definito nel Makefile (nel caso in esempio non esiste alcun valore da sostituire) e verrà avviata la compilazione con il flag delle opzioni di debugging. |
| http://ennebi.solira.org |
ennebi@solira.org |