对于我的make文件,我使用名为VERSION_NUMBER的变量,该变量以下列形式从构建环境传递:
VERSION_NUMBER = '#258'
现在,我希望从make下的字符串中提取数字258,但由于特殊字符“#”,我无法这样做。
我尝试了以下内容并且它有效(现在假设该变量在makefile中本地定义,而不是从构建环境传递):
VERSION_NUMBER:='\#258'
empty:=
quote:='
space:= $(empty) $(empty)
pound:=\#
extract:= $(subst $(quote),$(empty),$(VERSION_NUMBER))
$(info $$extract is [${extract}]) # Debug print
extract:= $(subst $(pound),$(empty),$(extract))
$(info $$extract is [${extract}]) # Debug print
这打印出以下内容:
$extract is [#258]
$extract is [258]
然而问题是,我在这里使用VERSION_NUMBER作为'\#258'而不是'#258',不幸的是我无法得到它以任何其他方式工作。
答案 0 :(得分:0)
反斜杠用于转义#
符号,因为make
不解释它。我不知道你的问题在哪里,因为在你的情况下它不会出现在你的字符串中。
无论如何,你已经拥有了解决方案,该解决方案适用于Makefile中声明的var以及来自make
调用的var。唯一的区别是,在Makefile中你必须转义#
字符。
采用这个简单的Makefile:
VERSION_NUMBER:='\#258'
pattern:=\#
# Remove the quotes and the hash symbol
PARSED_VERSION_NUMBER = $(subst ',,$(subst $(pattern),,$(VERSION_NUMBER)))
all:
@echo Version number is $(VERSION_NUMBER)
@echo Parsed version number is $(PARSED_VERSION_NUMBER)
如果您使用make all
调用它,您将获得此输出:
版本号是'#258'
解析版本号为258
看看反斜杠是如何消失的。
现在,如果您使用make all VERSION_NUMBER='#286'
调用它,您将获得此输出:
版本号是'#286'
解析版本号为286
正如您所看到的那样,行为完全相同。