我可以使用+=将附加到递归展开的变量后,效果很好。
在现实世界中,有时需要在前加上,或者在某些代码中使用将变量括起来而不展开。 我在这里发现了类似的问题GNU make: preend一个递归展开的变量?但我无法为我的情况迅速改变它。 基本上我需要这样写: 下一个结果: 谢谢。define Xdef
@echo $(1)
endef
define Xdef
@echo Before
# Value of original Xdef is here. i.e. echo $(1)
@echo After
endef
all:
$(call Xdef,Hello world)
$ make
Before
Hello world
After
好吧,你让我想到了这一点,这是可能的——尽管它很丑,我强烈建议不要使用这个,因为你会让任何试图维护makefile的人感到困惑。您可以通过在makefile中创建一个新定义来实现。原始定义必须是一个?=
,所以当解析makefile时,它不会覆盖新定义…
include new.mak
define Xdef ?=
@echo $(1)
endef
.PHONY: all
all:
@echo running $@
$(call Xdef,hello world)
new.mak: Makefile
@echo rebuilding $@
@echo "define Xdef =" >> $@
@echo " @echo Before" >> $@
@echo '$(call Xdef,$$(1))' >> $@
@echo " @echo After" >> $@
@echo "endef" >> $@
clean:
rm new.mak