Un pattern s'utilise un peu comme un caractère joker, mais uniquement
dans le cas des cibles. Le caractère faisant office de joker est
le caractère pourcent ('%').
L'intérêt est d'avoir plusieurs cibles. Les patterns permettent de filtrer les cibles pour savoir pour lesquelles d'entre elles les commandes qui suivent seront exécutées.
Pourquoi cet exemple est-il idiot ? Tout simplement parcequ'on met
pèle-mêle tous les fichiers à compiler dans la même variable
OBJECTS. Le plus simple aurait été d'utiliser plusieurs variables et
de faire des règles différentes pour chaque type de compilation
(normale, x11, athena).
# Notons que les objets sont à la fois des fichiers objets à lier et
# des exécutables à compiler
OBJECTS = text/main.o text/foo.o x11/main x11/bar athena/main
# Le compilateur est bien sûr gcc
CC = gcc
# Les dépendances sont tous les objets
all: $(OBJECTS)
# On va quand même faire quelque chose dans cette règle
echo DONE
# Ici les règles pour tous les fichiers .o se trouvant dans le
# répertoire 'text'
text/%.o: text/%.c
$(CC) -c text/$*.c
# Ici les règles pour tous les fichiers se trouvant dans le répertoire
# 'x11'
x11/%: x11/%.c
$(CC) -lX11 x11/$*.c
# Ici les règles pour les fichiers se trouvant dans le répertoire
# 'athena'
athena/%: athena/%.c
$(CC) -lXaw -lXext -lXmu -lXt -lX11 athena/$*.c
Les variables automatiques sont des variables qui sont actualisées au moment de l'exécution de chaque règle, en fonction de la cible et des dépendances.
$@: nom de la cible$<: première dépendance de la liste des dépendances$?: les dépendances plus récentes que la cible$^: toutes les dépendances$*: dans le cas de l'utilisation des patterns, la chaine
correspondant au %