在这个简单的makefile中:
var = foo
func = $(info $1 -> $($1) )
$(call func, var)
我希望$($1)
扩展到foo
,但输出:
var ->
为什么?以及如何让它工作?
不幸的是,make对空格的处理不一致。 一般来说,编写 makefile 时的最佳经验法则是,切勿在不需要变量和函数的地方使用空格。
这里的问题是$(call func, var)
$1
设置为值"var
"(即包含空格)。 在许多情况下,这不是问题,但在这种情况下,这意味着当您使用$($1)
时,它会扩展到$( var)
这当然不是设置变量。
如果删除空格:
$(call func,var)
它会起作用。
根据规则,make通常不会发生这种情况,因为正常的make规则是忽略前面的空格并保留后续的空格。 但不幸的是,这条规则似乎对call
不起作用。