Macros gnu make的奇怪行为

Macros gnu make的奇怪行为,macros,makefile,Macros,Makefile,我有一个简单的Makefile(仅用于测试) Gnu make(V3.80)生产: Makefile:8: Makefile:8: Makefile:10: some_value 为什么第一次和第二次警告都不打印任何内容?如手册所述 这意味着eval通过在宏中用$(1)替换some\u值来扩展为: var_some_value := some_value $(warning $(var_some_value)) $(warning $(var_some_value)) 然后变量$(var\u

我有一个简单的Makefile(仅用于测试)

Gnu make(V3.80)生产:

Makefile:8:
Makefile:8:
Makefile:10: some_value
为什么第一次和第二次警告都不打印任何内容?

如手册所述

这意味着
eval
通过在宏中用
$(1)
替换
some\u值来扩展为:

var_some_value := some_value
$(warning $(var_some_value))
$(warning $(var_some_value))
然后变量
$(var\u some\u value)
被展开,但此时宏展开的结果尚未作为makefile语法进行计算,因此尚未设置该变量。这意味着它扩展到:

var_some_value := some_value
$(warning )
$(warning )
最后,扩展文本作为makefile语法处理,因此定义变量,然后打印空警告

var_some_value := some_value
$(warning )
$(warning )