【问题标题】:Immediate variable expansion in recipe配方中的立即变量扩展
【发布时间】:2015-03-24 19:10:32
【问题描述】:

我正在构建一个构建系统,我需要在目标配方中立即进行变量扩展。

我的(简化的)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

有人吗?

【问题讨论】:

    标签: makefile


    【解决方案1】:

    你可以使用这样的东西来获得你想要的东西。它使用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
    

    【讨论】:

    • 有时很明显 ;) 谢谢 Etan!
    • 请记住,如果tgtone 有任何先决条件,那么它们的配方也将继承特定于目标的变量赋值;如果你想避免这种情况,只需在作业前加上 private 这个词。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多