我可以使用 + = 将追加添加到递归扩展变量中并且效果很好。
在现实世界中,有时需要将 prepend 或 wrap 变量放入某些代码而不进行扩展。
我在这里找到了类似的问题GNU make: prepend a recursively expanded variable? 但我无法迅速改变它。
基本上我需要这样的东西:
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
感谢。
答案 0 :(得分:0)
好吧,你让我想到了这一点,这是有可能的 - 尽管它很丑陋,而且我强烈建议不要使用它,因为你会混淆任何人试图维护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