将递归展开的变量包装成同名的新变量



我可以使用+=将附加到递归展开的变量后,效果很好。

在现实世界中,有时需要在前加上,或者在某些代码中使用变量括起来而不展开。

我在这里发现了类似的问题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

相关内容

  • 没有找到相关文章

最新更新