2

我有 a = abc def 12345 用 foo 替换 12345 我可以做 b = $(subst 12345, foo, $(a)​​) 所以 b = abc def foo 但我怎么能做 a = abc def foo ?

4

1 回答 1

1

当您使用=符号分配变量时,在读取变量时不会评估右侧。只有在规则中使用此类变量时才会评估这些变量。

当你把b = $(subst 12345, foo, $(a))字符串 "$(subst 12345, foo, $(a)​​)" 实际上保存在 b 变量中。您可以看到这样做的问题a = $(subst 12345, foo, $(a))- $(a)​​ 的旧值完全丢失,并且 a 变量现在具有循环扩展。

在某些情况下,您确实可以使用现有定义重新分配变量:例如,使用+=附加到其值。但是,当这不起作用时,请尝试使用:=来分配您的变量。这将在阅读作业时评估右侧。然后使用旧值的后续分配将用已计算的新值覆盖该值。

于 2013-10-07T23:37:08.290 回答