Fake Mail About Copertina SendMail |
Articoli
Make e Makefile
Spesso vi sarà capitato di scompattare dei sorgenti di qualche programma disponibile per Linux e di trovarvi dentro un Makefile, e delle istruzioni di installazione che richiedevano comandi tipo: make; make install.
Questi comandi sono invocazioni del comando 'make'.
L'utility make serve a determinare automaticamente quali pezzi di un programma hanno bisogno di essere ricompilati, e può generare i comandi necessari a farlo, seguendo alcune regole definite in un Makefile.
Sotto Linux e nella maggior parte dei sistemi UNIX, si usa generalmente il GNU make, scritto da Richard Stallman, iniziatore e leader del progetto GNU.
Per utilizzare make, è necessario creare un file chiamato Makefile che descriva le relazioni esistenti tra i vari file, e i comandi da eseguire per aggiornare ognuno di questi.
Tipicamente, in un programma, si aggiorna un eseguibile
partendo dai file oggetto, i quali vengono generati dai
file sorgenti. Una volta creato un makefile appropriato,
basterà digitare il comando
affinché automaticamente vengano ricompilati gli oggetti
che sono stati modificati, e venga ricreato l'eseguibile.
paci@fico# make
Un makefile consiste di alcune regole così descritte:
Di solito TARGET è il nome dell'eseguibile o del file
oggetto da ricompilare, ma può essere anche una azione
(es. clean). È un sorta di identificatore dell'azione
da compiere: alla chiamata
TARGET ... : DEPENDENCIES ...
COMMAND
...
...
verrà eseguito il TARGET ``clean''.
paci@fico# make clean
Le DEPENDENCIES sono usate come input per generare l'azione TARGET e di solito sono più di una. Più genericamente vengono citati i file o le azioni da cui dipende la completazione di TARGET.
Un COMMAND è invece, il comando da eseguire; può essere più di uno, e di solito si applica sulle DEPENDENCIES
Per esempio, un makefile fatto su misura per il programma
citato sopra, con 5 file .c e 3 header file, sarà:
Notate l'uso della barra per dividere un unico comando in più righe,
che ne facilita la lettura. A questo punto un semplice make eseguirà
la prima azione citata nel makefile, che nel nostro caso è
``prog_mio'', il quale a sua volta chiama altre azioni, cioè
i file oggetto da compilare. Potete anche specificare l'azione
da eseguire usando il comando `make azione'. Nel nostro caso,
un `make clean' avrebbe eseguito i comandi per rimuovere i
file oggetto e l'eseguibile di prog_mio.
prog_mio : main.o kdb.o video.o help.o print.o
cc -o prog_mio main.o kbd.o video.o \\
help.o print.o
main.o : main.c config.h
cc -c main.c -o main.o
kbd.o : kbd.c config.h
cc -c kbd.c -o kbd.o
video.o : video.c config.h defs.h
cc -c video.o -o video.o
help.o : help.c help.h
cc -c help.c -o help.o
print.o : print.c
cc -c print.c -o print.o
clean :
rm -f prog_mio
rm *.o
echo "pulizia completata"
Consiglio caldamente la lettura della documentazione che accompagna questa utility, in modo da trarne i maggiori vantaggi possibili. In particolare è molto utile la lettura della documentazione info del programma, che anch'io ho usato come spunto per scrivere questo articolo.
Consiglio anche una URL dove trovare altre informazioni: http://www.dina.kvl.dk/DinaUnix/Info/make/make_toc.html
Fake Mail About Copertina SendMail |