Ich möchte eine oder mehrere Zeilen innerhalb einer define-Direktive in einem Makefile kommentieren, so dass die Zeile ignoriert wird, wenn die Direktive erweitert wird. Das Ziel besteht darin, die kommentierte Zeile als Hinweis für die Benutzer meines Makefiles zu platzieren, um ein Beispiel zu zeigen, was in der define-Direktive sein könnte. Die Richtlinie wird zu einem Ziel erweitert.Wie man eine Zeile innerhalb einer Makefile define Direktive kommentiert?
Mit anderen Worten, ich möchte, dass Makefile
define ECHO_FOO =
# @echo foo
endef
all:
@echo Before call
$(ECHO_FOO)
@echo After call
.PHONY: all
als diese das gleiche Verhalten haben:
define ECHO_FOO =
endef
all:
@echo Before call
$(ECHO_FOO)
@echo After call
.PHONY: all
Das Problem ist, dass die erste Makefile mir folgende Fehler gibt:
process_begin: CreateProcess (NULL, # @ echo foo, ...) fehlgeschlagen. make (e = 2): Das System kann die angegebene Datei nicht finden. Makefile: 6: Rezept für das Ziel 'all' ist fehlgeschlagen make: *** [all] Fehler 2
Die GNU make:Makefile contents Seite lautet:
Innerhalb einer Richtlinie definieren, Kommentare werden nicht ignoriert während der Definition der Variablen, sondern im Wert der Variablen intakt gehalten. Wenn die Variable erweitert wird, werden sie entweder als Kommentare oder als Rezepttext behandelt, abhängig vom Kontext, in dem die Variable ausgewertet wird.
Aber das erklärt nicht, in der konkreten Fall des #
Symbol als Make Kommentar behandelt wird oder als Rezepttext (das das Problem, das ich treffe zu sein scheint).
Kann mir jemand sagen, wie man das #
-Symbol als Kommentarzeichen in einer Define-Funktion behandelt?
Ich habe bereits versucht, alle folgenden Zeilen mit der Idee, das Symbol #
Flucht oder die Vertiefung aber keiner von ihnen gab mir eine korrekte Ausgabe zu ändern:
#@echo foo
#@echo foo
##@echo foo
##@echo foo
\#@echo foo
\#@echo foo
/#@echo foo
/#@echo foo
Ich bin mit MinGW 3.82 machen auf Windows aber ich habe bereits andere Implementierungen von make v3.82.90 und 4.1 ausprobiert.
Danke, es funktioniert gut und ich bin froh zu wissen, dass es auf beiden Systemen funktioniert. Eigentlich ist der Befehl einfach, aber er könnte vom Endbenutzer erweitert werden, und ich war auf der Suche nach etwas Einfachem, weil der Endbenutzer kein großes Makefile-Wissen haben sollte, um meins zu verwenden. Zumindest war das mein Ziel. – Tim
Antwort aktualisiert. – MadScientist
Es ist nicht wirklich komplex, es ist eine Direktive, die alle Aufrufe von Post-Build-Skripten enthält, d. H. Von 0 (Standard mit kommentiertem Beispiel) bis zu vielen. Die Definitionsrichtlinie schien die beste Lösung zu sein, aber vielleicht war das eine schlechte Wahl. – Tim