当前位置: 首页 > 工具软件 > GNU DDD > 使用案例 >

GNU-make::字符串处理函数

郗河
2023-12-01

在makefile中常常要处理字符串, 掌握一些简单的函数可以极大简化这个过程.

1) 替换子串,删除子串:$(subst <from>,<to>,<text>)

C_SUFFIX  := .c
OBJ_SUFFIX:= .o
SOURCE_NAMES := a.c b.c c.c 

OBJECT_NAMES := $(subst $(C_SUFFIX),$(OBJ_SUFFIX),$(SOURCE_NAMES))

@echo OBJECT_NAMES is \"$(OBJECT_NAMES)\"

2) 模式替换子串,删除子串:$(patsubst <pattern>,<replacement>,<text>)

C_SUFFIX  := .c
OBJ_SUFFIX:= .o
SOURCE_NAMES := a.c b.c c.c

PAT_OBJECT_NAMES := $(patsubst %.c, %.o, $(SOURCE_NAMES))

@echo PAT_OBJECT_NAMES is \"$(PAT_OBJECT_NAMES)\"

3) 字符串之间, 头尾最多只留下一个空格:$(strip <string>)

STRING_WITH_SPACE :=  "   a    b    c   "

#at most one space at head, mid, tail
STRING_STRIP_SPACE := $(strip $(STRING_WITH_SPACE))

@echo STRING_WITH_SPACE is \"$(STRING_WITH_SPACE)\"
@echo STRING_STRIP_SPACE is \"$(STRING_STRIP_SPACE)\"

4) 字符串查找:$(findstring <find>,<in>)

STRING_main := aaa bbb ccc ddd eee fff ggg 
STRING_a := aaa 
STRING_d := ddd 
STRING_g := ggg 
STRING_k := kkk 

FIND_a := $(findstring $(STRING_a), $(STRING_main))
FIND_d := $(findstring $(STRING_d), $(STRING_main))
FIND_g := $(findstring $(STRING_g), $(STRING_main))
FIND_k := $(findstring $(STRING_k), $(STRING_main))

@echo STRING_main is \"$(STRING_main)\"
@echo STRING_a is \"$(STRING_a)\"
@echo STRING_d is \"$(STRING_d)\"
@echo STRING_g is \"$(STRING_g)\"
@echo FIND_a is \"$(FIND_a)\"
@echo FIND_d is \"$(FIND_d)\"
@echo FIND_g is \"$(FIND_g)\"
@echo FIND_k is \"$(FIND_k)\"

5) 按照模式过滤出来:$(filter <pattern...>,<text>)

CH_SOURCES := a.c b.c c.s d.h

SELECT_CS  := $(filter %.c %.s,$(CH_SOURCES))
SELECT_H  := $(filter %.h,$(CH_SOURCES))

@echo SELECT_CS is \"$(SELECT_CS)\"
@echo SELECT_H is \"$(SELECT_H)\"

6) 按照模式过滤掉:$(filter-out <pattern...>,<text>)

CH_SOURCES := a.c b.c c.s d.h

NO_SELECT_CS  := $(filter-out %.c %.s,$(CH_SOURCES))
NO_SELECT_H  := $(filter-out %.h,$(CH_SOURCES))

@echo NO_SELECT_CS is \"$(NO_SELECT_CS)\"
@echo NO_SELECT_H is \"$(NO_SELECT_H)\"

7) 单词排序去重:$(sort <list>)

UNSORT_DUP_FILE_LIST := 3.c 5.c 4.c 9.c 8.c 3.c 4.c 5.c

SORT_NODUP_FILE_LIST := $(sort $(UNSORT_DUP_FILE_LIST))

@echo SORT_NODUP_FILE_LIST is \"$(SORT_NODUP_FILE_LIST)\"

8) 取第一个单词:$(firstword <text>)

UNSORT_DUP_FILE_LIST := 3.c 5.c 4.c 9.c 8.c 3.c 4.c 5.c
SORT_NODUP_FILE_LIST := $(sort $(UNSORT_DUP_FILE_LIST))

FIRST_WORD           := $(firstword $(SORT_NODUP_FILE_LIST))

@echo FIRST_WORD is \"$(FIRST_WORD)\"

9) 取出单词:$(word <n>,<text>),n>=1

UNSORT_DUP_FILE_LIST := 3.c 5.c 4.c 9.c 8.c 3.c 4.c 5.c
SORT_NODUP_FILE_LIST := $(sort $(UNSORT_DUP_FILE_LIST))

N_WORD               := $(word 2, $(SORT_NODUP_FILE_LIST))

@echo N_WORD is \"$(N_WORD)\"

10) 取单词串:$(wordlist <ss>,<e>,<text>),1<=ss<=e

UNSORT_DUP_FILE_LIST := 3.c 5.c 4.c 9.c 8.c 3.c 4.c 5.c
SORT_NODUP_FILE_LIST := $(sort $(UNSORT_DUP_FILE_LIST))

WORD_LIST            := $(wordlist 1,3, $(SORT_NODUP_FILE_LIST))

@echo WORD_LIST is \"$(WORD_LIST)\"

11) 单词个数统计:$(words <text>)

UNSORT_DUP_FILE_LIST := 3.c 5.c 4.c 9.c 8.c 3.c 4.c 5.c
SORT_NODUP_FILE_LIST := $(sort $(UNSORT_DUP_FILE_LIST))

WORD_COUNT           := $(words $(SORT_NODUP_FILE_LIST))

@echo WORD_COUNT is \"$(WORD_COUNT)\"

12) 连接:$(join <list1>,<list2>)

STRING_SET_ch   := aaa bbb
STRING_SET_num  := 111 222 333

JOIN_SET_ch_num := $(join $(STRING_SET_ch), $(STRING_SET_num))
JOIN_SET_num_ch := $(join $(STRING_SET_num), $(STRING_SET_ch))

@echo JOIN_SET_ch_num is \"$(JOIN_SET_ch_num)\"
@echo JOIN_SET_num_ch is \"$(JOIN_SET_num_ch)\"

 类似资料: