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

Der*_*rek 4 string parsing makefile

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

例如,

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

define get_first_two_char
...
endef
Run Code Online (Sandbox Code Playgroud)

Eri*_*ski 5

嗯,它可以做到,但是手动实现它很麻烦。最简单的方法是获取具有内置功能的GNU Make Standard Librarysubstr。如果这太过分了,您可以只从库中提取该函数,但就像我说的那样,它令人惊讶地混乱。

本质上,您对字符串进行了一系列替换以在每个字符后插入一个空格:

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"
Run Code Online (Sandbox Code Playgroud)

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

TMP2:=$(wordlist 1,2,$(TMP))
# TMP2 now has "U n"
Run Code Online (Sandbox Code Playgroud)

最后,您$(subst)再次使用,现在剥离您最初注入的空间:

VAR_TERSE := $(subst $(SPACE),,$(TMP2))
# VAR_TERSE now has "Un"
Run Code Online (Sandbox Code Playgroud)