Die Regel:
%.o: %.c
gcc $< -o:[email protected]
für jede C-Datei einer Objektdatei erstellen Verwenden Sie den Befehl darunter. Also ja,% ist wie eine Wildcard, aber ich denke, es ist "für jeden", denn das passiert als Ergebnis der Regel. $<
bedeutet abhängige Dateien und [email protected]
bedeutet das Objekt, das gebaut werden soll. Wenn Sie dies tun:
fred.o: fred.c
gcc $< -o:[email protected]
Hier [email protected]=fred.o
und $<=fred.c
Ebenso
fred.o: fred.c george.c
gcc $< -o:[email protected]
geben [email protected]=fred.o
und $<=fred.c george.c
.
Edit: von den Befehlen werde ich auf diese erweitern.
%
wird alles passen, das dazu passt. So bedeutet %.c
alle .c-Dateien im aktuellen Verzeichnis. asm/%.asm
bedeutet alle Dateien im Unterverzeichnis asm mit der Erweiterung .asm
. Es wirkt wie ein Token, also wird das, was gefunden wird, immer dann verwendet, wenn Sie das nächste Mal %
, d. H. Im Etikett, verwenden.
also die Regel:
objs/asm/%.o: arch/%.S
nasm -felf64 $< -o [email protected]
Bei arch/hello.S
, arch/bye.S
, arch/somethingelse.S
wird obj/asm/hello.o
, obj/asm/bye.S
, obj/asm/somethingelse.o
erstellen.
Diese Frage ist "welches Ziel sind Wildcards für?" Es gab eine andere Frage formuliert "wie kann ich das Ziel erreichen" mit der Antwort "mit Wildcards!" Ich würde es ein Reverse-Dupe nennen :-) Hier ist die Frage: http://StackOverflow.com/Questions/1633527/Wildcard-Targets-in-Amakefile –
Ich las über Musterregeln an: gnu.org/ software/automake/manual/make/Pattern-Rules.html Dort las ich eine Aussage, die sagte: "Eine Musterregel sieht wie eine gewöhnliche Regel aus, außer dass ihr Ziel das Zeichen '%' enthält (genau eine davon)." Was? ist genau einer von ihnen gemeint? – goldenmean