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?

Jonas Byström
quelle
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]}')
Martin
quelle
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))
richq
quelle