配方中的立即变量扩展
Immediate variable expansion in recipe
我正在制作构建系统,我需要在目标配方中立即进行变量扩展。
我的(简化的)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
有人吗?
你可以用这样的东西来得到你想要的。它使用 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
我正在制作构建系统,我需要在目标配方中立即进行变量扩展。
我的(简化的)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
有人吗?
你可以用这样的东西来得到你想要的。它使用 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