配方中的即时变量扩展

时间:2015-03-24 19:10:33

标签: makefile

我正在建立一个构建系统,我需要在目标的配方中立即进行变量扩展。

我的(简化)makefile:

VAR=one

all:
    @echo one is $(VAR)

VAR=two

当我运行make时,输出为:

one is two

预期输出(配方中的延迟扩展)但不是所希望的。

使其工作的一种方法是遵循makefile。但是,这使得配方总是被执行,也不是所希望的:

VAR=one

all: $(VAR)
    @echo one is $(VAR)

$(VAR):
    $(eval VAR=$@)

VAR=two

任何?

1 个答案:

答案 0 :(得分:3)

你可以使用这样的东西来得到你想要的东西。它使用target-specific variable values在分析时捕获变量。

$ cat Makefile
VAR=one

all: tgtone tgttwo

tgtone: VAR:=$(VAR)
tgtone:
        @echo $@: VAR is $(VAR)

tgttwo:
        @echo $@: VAR is $(VAR)

VAR=two
$ make
tgtone: VAR is one
tgttwo: VAR is two