示例:
var1 = x
dep : $(var1)
echo ($^ -> $@)
这将显示x-> dep,但我真正想要显示的是var1-> dep。
我基本上想在整个规则中散布回声,这样我就可以理解依赖图了。什么都没用。
答案 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