变量如何在生成文件中扩展?



在这个简单的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不起作用。

最新更新