Per iniziare vediamo subito un esempio:
Esempio 2-4. Esempio di suffisso
.SUFFIXES: .c
.c.o:
$(CC) -c $(CFLAGS) $<
Il target speciale .SUFFIXES indica al make il tipo di suffisso,
che dovrà essere convertito. Il target .c.o, che é una dipendenza
di .SUFFIXES, dice al make che le regole seguenti servono per compilare
i file con il suffisso .c in un file avente lo stesso nome, ma con
estensione .o. Al di là delle macro $(CC) e $(CFLAGS), troviamo
in questo esempio i caratteri $<.
Questi costituiscono una variabile automatica, che é una delle altre
caratteristiche del make per migliorare la leggibilità dei Makefile.
Ogni variabile automatica può essere usata in qualsiasi parte del
Makefile e viene sostituita dal valore che rappresenta solo prima
di essere usata.
|
Variabile automatica |
Valore |
|
$? |
Elenco dipendenze cambiate più frequentemente rispetto a quelle correnti. |
|
$@ |
Target corrente. |
|
$* |
Dipendenza corrente privata del suffisso. |
|
$< |
Dipendenza corrente |
|
$^ |
Tutte le dipendenze. |
|
Variabile automatica |
Valore |
La variabile utilizzata nel nostro esempio é quella di dipendenza
corrente ($<) che viene rimpiazzata con i file di origine con
suffisso .c.
Un makefile completo.
da fare
# Ultimo esempio di makefile
prefix = /usr/local
CC = cc
CFLAGS = -O -I.
exec_prefix = ${prefix}
bindir = ${exec_prefix}/bin
mandir = ${prefix}/man
INSTALL = install -c
INSTALL_PROGRAM = ${INSTALL}
INSTALL_DATA = ${INSTALL} -m 644
.c.o:
$(CC) -c $(CFLAGS) $*.c
MATRIX = main.o token.o mostra.o ins.o\
matrix.o
all: sysa
sysa: $(MATRIX)
$(CC) -o sysa $(MATRIX)
main.o : main.c header1.h
token.o : token.c tokentype.h
mostra.o : mostra.c header1.h
ins.o : ins.c tokentype.h
matrix.o : matrix.c header1.h
install: sysa
$(INSTALL_PROGRAM) sysa $(bindir)/sysa
$(INSTALL_DATA) sysa.1 $(mandir)/man1/sysa.1
clean:
-rm -f *.o sysa
Spiegazione da fare.
Torna all'indice Generale del corso di Corso di C con Linux di Software Planet