在一个 Makefile 中,如果给定一个字符串,能否使用 Makefile 语法(不使用 shell 调用)提取未知字符串的前两个字符?
例如,
VAR := UnKnown
VAR_TERSE = $(call get_first_two_chars, $(VAR))
define get_first_two_char
...
endef
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"
我真的不赞成强迫 Make 做它明显不想做的事情,但是... 我无法抵制一个好的谜题。
$(eval FOO := $$$(VAR))
$(eval FOO := $$$(FOO))
VAR_TERSE:= $(VAR:$(FOO)=)
使用 shell 和 sed?
define get_first_two_char
$(shell echo $1 | sed 's/^\(..\).*/\1/' )
endef