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 %