makefile 中的变量如何扩展?
How does variable expands in makefile?
在这个简单的 makefile 中:
var = foo
func = $(info -> $() )
$(call func, var)
我希望 $()
扩展到 foo
,但输出:
var ->
为什么?以及如何让它发挥作用?
不幸的是 make 对 whitespace 的处理不一致。一般来说,编写 makefile 时最好的经验法则是永远不要在变量和函数中不需要的地方使用 whitespace。
这里的问题是$(call func, var)
将</code>设置为值“<code> var
”(即包含了space)。在许多情况下,这不是问题,但在这种情况下,这意味着当您使用 $()
时,它会扩展为 $( var)
,这当然不是一个集合变量。
如果删除 space:
$(call func,var)
它会起作用。
根据make的规则usually uses this should not happen because the normal rules for make is that preceding whitespace 被忽略,后续 白色space 被保留。但不幸的是,该规则似乎对 call
无效。
在这个简单的 makefile 中:
var = foo
func = $(info -> $() )
$(call func, var)
我希望 $()
扩展到 foo
,但输出:
var ->
为什么?以及如何让它发挥作用?
不幸的是 make 对 whitespace 的处理不一致。一般来说,编写 makefile 时最好的经验法则是永远不要在变量和函数中不需要的地方使用 whitespace。
这里的问题是$(call func, var)
将</code>设置为值“<code> var
”(即包含了space)。在许多情况下,这不是问题,但在这种情况下,这意味着当您使用 $()
时,它会扩展为 $( var)
,这当然不是一个集合变量。
如果删除 space:
$(call func,var)
它会起作用。
根据make的规则usually uses this should not happen because the normal rules for make is that preceding whitespace 被忽略,后续 白色space 被保留。但不幸的是,该规则似乎对 call
无效。