示例:
var1 = x
dep : $(var1)
echo ($^ -> $@)这将显示x -> dep,但我真正想显示的是var1 -> dep。
我基本上想把这个回声散布在所有规则上,这样我就可以理解依赖图了。其他的都不管用。
发布于 2019-01-13 00:17:12
首先,要在我的环境中工作,您的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 -> depvar1_变量需要在单独的行上定义(参见https://stackoverflow.com/a/20714468/318716),这似乎没有很好的文档记录。输出的顺序很有趣。
Edit:这个想法的一个更简单的变体是替换:
var1 = x
dep: var1_=var1只需:
var1 = x
var1_ = var1https://stackoverflow.com/questions/54156480
复制相似问题