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 无效。