如何在 GNU make 中替换变量中的字符串?

问题描述 投票:0回答:2

我有 = abc def 12345 将 12345 替换为 foo 我可以做 b = $(subst 12345, foo, $(a)) 所以 b = abc def foo 但我怎样才能制作 a = abc def foo ?

variables gnu-make
2个回答
1
投票

当您使用

=
符号分配变量时,读取变量时不会评估右侧。这些变量仅在规则中使用时才会被评估。

当您输入

b = $(subst 12345, foo, $(a))
时,字符串“$(subst 12345, foo, $(a))”实际上保存在 b 变量中。您可以看到执行
a = $(subst 12345, foo, $(a))
的问题 - $(a) 的旧值完全丢失,并且 a 变量现在具有循环扩展。

在某些情况下,您确实可以使用现有定义重新分配变量:例如,使用

+=
附加到其值。但是,当这不起作用时,请尝试使用
:=
来分配变量。这将在阅读作业时评估右侧。然后,稍后使用旧值的分配将用已计算的新值覆盖该值。


0
投票
PROJECT_NAME = $(notdir $(subst .,_,$(PWD)))
export PROJECT_NAME
© www.soinside.com 2019 - 2024. All rights reserved.