Ich verstehe immer noch nicht, warum "falsche" Regeln in Makefiles haben ".PHONY" als Ziel. Es wäre viel logischer als Voraussetzung.Warum .PHONY: Ziel und nicht Ziel: .PHONY?
Muss ich näher darauf eingehen? Wenn A
von B
abhängt und B
ist falsch, dann ist A
auch falsch. So ist das Abhängigkeitsdiagramm .PHONY
← B
→ A
überraschend im Vergleich zu .PHONY
→ B
→ A
. (Ein weiteres Argument ist, dass eine Implementierung von make
muss das .PHONY
Ziel ganz besondere handhaben.)
Während diese Kritik eher theoretisch erscheinen mag (zu sinnlos) - „da macht so alt ist, seine Syntax ist hier zu bleiben“. Aber ich bin keine Syntaxänderung vorschlägt, gibt es eine Alternative:
mit GNU Make (zumindest) die folgende Makefile erklärt ein Schwindler target_A
:
target_A: _PHONY
touch target_A
_PHONY:
#noop
Frage 1: Diese so ist einfach und sauber, sicherlich bin ich nicht der erste Erfinder. In der Tat, warum hat make
angesichts dieser Alternative jemals die spezielle Syntax benötigt?
Es scheint mir, dass dies würde auch ganz gut Fragen über wildcards in phony targets lösen, und könnte sogar shed some light on .PHONY's meaning, wenn Anfänger bezweifeln.
Frage 2: Können Sie an einen Umstand denken, bei dem dieser Ansatz unterlegen ist? (? Ist make .PHONY
irgendwelcher Aufruf)
(Ich sollte erwähnen, dass, während ich andere make
s aufgerufen haben, GNU Make ist die einzige Implementierung, die ich einige Erfahrung mit -. Lesen und Schreiben von Makefiles)
(sollte RTFM haben) Das GNU Make-Handbuch tatsächlich [erwähnt dieses Rezept] (http://www.gnu.org/software/make/manual/html_node/Force-Targets.html#Force-Targets) als weniger effizient, aber portabler. Ich vermute, dass die Geschwindigkeitsgewinne vernachlässigbar sind. Dies deutet auf eine negative Antwort auf Frage 2 hin. (?) – tiwo