Makefile:返回字符串的前两个字符

时间:2011-08-18 00:45:03

标签: string parsing makefile

给定Makefile中的字符串,是否可以使用Makefile语法提取未知字符串的前两个字符(不使用shell调用)?

例如,

VAR := UnKnown
VAR_TERSE = $(call get_first_two_chars, $(VAR))

define get_first_two_char
...
endef

2 个答案:

答案 0 :(得分:4)

嗯,可以做到,但手工实施却相当混乱。最简单的方法是获取GNU Make Standard Library,它具有内置的substr函数。如果这有点过分,你可以从库中提取这个功能,但就像我说的那样,它令人惊讶地混乱。

基本上你在字符串上做一系列的替换,在每个字符后插入一个空格:

EMPTY:=
SPACE:=$(EMPTY) $(EMPTY)
VAR := UnKnown
TMP:=$(subst a,a ,$(subst b,b ,$(subst c,c ,.........$(VAR)))))
# TMP now has "U n K n o w n"

接下来,您可以使用$(wordlist)函数来获取中间结果的前两个“单词”:

TMP2:=$(wordlist 1,2,$(TMP))
# TMP2 now has "U n"

最后,再次使用$(subst),现在去掉你最初注入的空间:

VAR_TERSE := $(subst $(SPACE),,$(TMP2))
# VAR_TERSE now has "Un"

答案 1 :(得分:2)

我真的不赞成强迫Make做它显然不想做的事情,但是......我无法抗拒一个好的谜题。

$(eval FOO := $$$(VAR))
$(eval FOO := $$$(FOO))
VAR_TERSE:= $(VAR:$(FOO)=)