在makefile中转义


87

我正在尝试在makefile中执行此操作,但它以失败告终:

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

你知道为什么吗?我想这与转义有关,但是什么地方?


5
它怎么会失败?它会产生什么错误消息?您期望它做什么?

Answers:


163

这是美元符号,在makefile文件中,您必须键入$$以获得一个美元符号:

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

133
是的,赚钱完全是浪费钱:您必须投入两个$才能得到一个。
P Shved

8
@PavelShved我从来没有为make付款。:)
Trevor Hickey

对于在搜索过程中找到此答案的任何人,也会出现“#”字符作为注释开始的问题。对于这些,您应该使用反斜杠转义:“ \#”。
Jim Monte

16

当您精疲力尽时,Make相当脆弱。这是一个做同样事情的非awk版本:

space := $() #

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

all:
    $(info $(M_ARCH))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.