Heim >Backend-Entwicklung >Golang >Warum schlägt mein Makefile-Befehl fehl, wenn Shell-Ausdrücke verwendet werden?
Makefile-Auswertung von Ausdrücken
Bei der Arbeit mit Makefiles ist es wichtig zu verstehen, wie Ausdrücke in Befehle interpoliert werden. Ein häufiger Fallstrick entsteht beim Versuch, Shell-Ausdrücke in Makefile-Befehle zu integrieren.
Ein solcher Fall ist die Arbeit mit Go-Tests. Um Abhängigkeiten in einem Go-Projekt eines Anbieters zu überspringen, könnte man den folgenden Befehl in der Befehlszeile verwenden:
$ go test $(go list ./... | grep -v /vendor/)
Dieser Befehl filtert erfolgreich Tests von Anbietern heraus. Wenn Sie jedoch versuchen, denselben Befehl wie folgt in ein Makefile aufzunehmen:
test: go test $(go list ./... | grep -v /vendor/) .PHONY: test
Der Ausdruck wird nicht ausgewertet. Stattdessen wird der Befehl wörtlich behandelt, was zu einem Fehler führt.
Um dieses Problem zu beheben, maskieren Sie das Dollarzeichen ($) doppelt, wie unten gezeigt:
test: go test $$(go list ./... | grep -v /vendor/) .PHONY: test
By double Durch das Escapezeichen des Dollarzeichens versteht das Makefile, dass der Ausdruck von einer Shell ausgewertet werden soll, was die erfolgreiche Interpolation und Ausführung des Befehls ermöglicht.
Das obige ist der detaillierte Inhalt vonWarum schlägt mein Makefile-Befehl fehl, wenn Shell-Ausdrücke verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!