patsubst e wildard sono funzioni del make
http://www.gnu.org/software/make/man...ake.html#SEC32
se devo compilare un progetto fatto di più file contenuti nella stessa directory uso questo makefile
codice:
CC = gcc
CFLAGS = -g -Wall
progetto.exe: $(patsubst %.c,%.o,$(wildcard *.c))
$(CC) -o $@ $^
%.o : %.c
$(CC) $(CFLAGS) -c $<
clean:
rm -f *.o
se devo compilare tanti eseguibili quanti sono i file sorgenti (1 eseguibile per ogni sorgente, tipico di esercizi) uso questa variante
codice:
CC = gcc
CFLAGS = -g -Wall
all: $(patsubst %.c,%.exe,$(wildcard *.c))
%.exe: %.o
$(CC) -o $@ $<
%.o : %.c
$(CC) $(CFLAGS) -c $<
clean:
rm -f *.o
$@ si riferisce al nome del target
$< si riferisce al singolo file di cui il target dipende
$^ si riferisce a tutti i file di da cui il target dipende
se ho un file chiamato test.c
allora, data questa regola
codice:
%.exe: %.o
$(CC) -o $@ $<
$@ è la stringa test.exe
$< è la stringa test.o