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)
嗯,它可以做到,但是手动实现它很麻烦。最简单的方法是获取具有内置功能的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)