我有一个简单的Makefile(仅用于测试)
define my_macro
var_$(1) := $(1)
$(warning $(var_$(1)))
$(warning $(var_some_value))
endef
$(eval $(call my_macro,some_value))
$(warning $(var_some_value))
Gnu make(v 3.80)产生:
Makefile:8:
Makefile:8:
Makefile:10: some_value
为什么第一次甚至第二次警告都不打印?
答案 0 :(得分:1)
这意味着eval
通过在宏中用some_value
代替$(1)
来扩展到此范围:
var_some_value := some_value
$(warning $(var_some_value))
$(warning $(var_some_value))
然后变量$(var_some_value)
被扩展,但此时宏扩展的结果尚未被评估为makefile语法,因此尚未设置变量。这意味着它扩展到:
var_some_value := some_value
$(warning )
$(warning )
最后,扩展文本被处理为makefile语法,因此变量被定义,然后打印空警告。