变量的Makefile表示法:$$ {var} $ {var} $ {var)

时间:2019-11-27 23:49:45

标签: makefile

$${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}的双美元符号

1 个答案:

答案 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 templatessecondary expansion中也有介绍,但这是高级主题。