将递归扩展变量换行为具有相同名称的新变量

时间:2016-11-09 16:30:41

标签: variables recursion makefile multiline prepend

我可以使用 + = 追加添加到递归扩展变量中并且效果很好。

在现实世界中,有时需要将 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

感谢。

1 个答案:

答案 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