Corso di C con Linux

Le regole dei suffissi in un Makefile

 

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.


Nella Tabella 2.4, vediamo le variabili automatiche più usate nei Makefile.

Tabella 2-4. Variabili automatiche

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