我正在建立一个构建系统,我需要在目标的配方中立即进行变量扩展。
我的(简化)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
任何?
答案 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