【发布时间】:2021-03-04 17:57:03
【问题描述】:
在这个简单的 makefile 中:
var = foo
func = $(info $1 -> $($1) )
$(call func, var)
我希望 $($1) 扩展到 foo,但输出:
var ->
为什么?以及如何让它发挥作用?
【问题讨论】:
标签: variables makefile gnu expansion
在这个简单的 makefile 中:
var = foo
func = $(info $1 -> $($1) )
$(call func, var)
我希望 $($1) 扩展到 foo,但输出:
var ->
为什么?以及如何让它发挥作用?
【问题讨论】:
标签: variables makefile gnu expansion
不幸的是,make 对空格的处理不一致。一般来说,编写 makefile 时最好的经验法则是,您永远不应该在变量和函数中不需要的地方使用空格。
这里的问题是$(call func, var) 将$1 设置为值“ var”(即包含空格)。在许多情况下,这不是问题,但在这种情况下,这意味着当您使用 $($1) 时,它会扩展为 $( var),这当然不是一个集合变量。
如果删除空格:
$(call func,var)
它会起作用的。
根据 make 通常 的规则,这不应该发生,因为 make 的正常规则是忽略 preceding 空格和 subsequent 空格被保留。但不幸的是,该规则似乎不适用于call。
【讨论】: