Das ist ein "implicit rule". Die %
macht das Wort $(OBJDIR)/%.o
ein Muster. Es sagt make, wenn es versucht, ein Ziel zu erstellen und der Name des Ziels mit diesem Muster übereinstimmt (wobei %
ein oder mehrere Zeichen ersetzen kann - beliebige Zeichen) UND dass eine Datei mit dem Muster $(SRCDIR)/%.c
übereinstimmt (wobei %
10) hat hier den gleichen Wert wie im Ziel) entweder existiert bereits oder kann erstellt werden, dann kann make dieses Rezept verwenden, um dieses Ziel zu erstellen.
Also, wenn make will eine Datei foo/bar.o
und die Variable OBJDIR
den Wert foo
, dann ist dieses Muster bauen foo/%.o
wird diese Datei Übereinstimmen mit dem %
bar
passend (dies ist die Stamm in dem GNU macht Dokumentation genannt) .
Dann, wenn SRCDIR
den Wert blah
und kann (oder erstellen), um eine Datei mit dem Namen blah/bar.c
, dann ist diese implizite Regel verwendet wird, finden macht das Ziel foo/bar.o
, indem Sie dieses Rezept ($(CC) -c -o [email protected] $< $(CFLAGS)
) zu bauen.
Perfekt, macht Sinn mit dem Beispiel gekoppelt. –