Flucht in Makefile


86

Ich versuche dies in einem Makefile zu tun und es schlägt schrecklich fehl:

M_ARCH := $(shell g++ -dumpmachine | awk '{split($1,a,"-");print a[1]}')

weißt du, warum? Ich denke, es hat mit Flucht zu tun, aber was und wo?


5
Wie scheitert es? Welche Fehlermeldungen werden erzeugt? Was erwarten Sie davon?

Antworten:


162

Es ist das Dollarzeichen. In Makefiles müssen Sie Folgendes eingeben $$, um ein einzelnes Dollarzeichen zu erhalten:

M_ARCH := $(shell g++ -dumpmachine | awk '{split($$1,a,"-");print a[1]}')

133
Ja, machen ist eine totale Geldverschwendung: Sie müssen zwei setzen $, um eins zu bekommen.
P Shved

8
@ PavelShved Ich habe noch nie für Make bezahlt. :)
Trevor Hickey

Für alle, die diese Antwort im Rahmen einer Suche finden, gibt es auch Probleme mit '#' Zeichen, die als Beginn von Kommentaren verwendet werden. Für diese sollten Sie mit einem Backslash entkommen: "\ #".
Jim Monte

16

Make ist ziemlich lispig, wenn man sich darauf einlässt. Hier ist eine Nicht-AWK-Version, die dasselbe tut:

space := $() #

M_ARCH := $(firstword $(subst -,$(space),$(shell g++ -dumpmachine)))

all:
    $(info $(M_ARCH))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.