如何仅将变量名称本身作为配方的一部分打印出来?

时间:2019-01-12 03:12:43

标签: makefile

示例:

var1 = x

dep : $(var1)
     echo ($^ -> $@)

这将显示x-> dep,但我真正想要显示的是var1-> dep。

我基本上想在整个规则中散布回声,这样我就可以理解依赖图了。什么都没用。

1 个答案:

答案 0 :(得分:0)

首先,要在我的环境中工作,需要对makefile进行两处修改:用引号替换echo中的括号,并为x添加一条规则,以得出:

var1 = x

dep: $(var1)
    echo "$^ -> $@"

x:

似乎没有方法可以恢复配方中变量名的未扩展形式。我建议的解决方案/解决方法是双重的:将变量名缓存在另一个变量中,并按照MadScientist的注释使用$(warning ...)。例如,makefile:

var1 = x

dep: var1_=var1
dep: $(var1)
    @echo "$^ -> $@"
    @echo "$(var1_) -> $@"
    $(warning "Info: Using $^ to build $@")
    $(warning "Info: Using $(var1) to build $@")
    $(warning "Info: Using $(var1_) to build $@")
    $(warning "Info: Using $($(var1_)) to build $@")

x:

将给出:

Makefile:7: "Info: Using x to build dep"
Makefile:8: "Info: Using x to build dep"
Makefile:9: "Info: Using var1 to build dep"
Makefile:10: "Info: Using x to build dep"
x -> dep
var1 -> dep

var1_变量需要在单独行上定义(请参见https://stackoverflow.com/a/20714468/318716),该文件似乎没有充分的文档说明。输出的顺序很有趣。

编辑:此想法的一个更简单的变体是替换:

var1 = x

dep: var1_=var1

仅:

var1 = x
var1_ = var1