$${var}
${var}
$(var)
components = apple orange bananas
.PHONY run-fruits
for fruit in $(fruits); do \
DIR=${TOPDIR}/$${fruit} FRUIT=$${fruit} $(MAKE) -C ${TOOLDIR}/makefiles
done
您可以看到,$(MAKE)
是括号,${TOPDIR}
和${TOOLDIR}
是方括号,水果$${fruit}
的双美元符号
答案 0 :(得分:4)
请参见here。
$(X)
和${X}
是等效的。
$$
扩展为$
,因此$${X}
扩展为${X}
,这是一个有用的技巧,可以推迟对变量的求值。
foo:
echo $SHELL_VARIABLE # fails
echo $$SHELL_VARIABLE # works as intended
第一个命令失败,因为Make看到$S
,对其求值并将其扩展为空(除非您将S
定义为Make变量),然后将“ echo HELL_VARIABLE”传递给外壳。第二条命令起作用是因为Make将$$
转换为$
并将“ echo $ SHELL_VARIABLE”传递到外壳。 recipe templates和secondary expansion中也有介绍,但这是高级主题。