use*_*361 5 makefile wildcard filter
我正在写一个Makefile,我陷入过滤器功能限制.实际上,过滤器只需要一个通配符.
我想做的是:我有一个列表文件,一些匹配正则表达式blabla,一些不匹配.但为此我需要2个通配符,因此我不能使用过滤功能.
我想将原始列表拆分为2个列表,一个包含所有包含blabla字符串的元素(过滤器等效),另一个包含不匹配的列表(过滤掉的等价物).
谢谢你的帮助.
您无需运行任何外部命令即可完成此操作.定义两个宏
containing = $(foreach v,$2,$(if $(findstring $1,$v),$v))
not-containing = $(foreach v,$2,$(if $(findstring $1,$v),,$v))
Run Code Online (Sandbox Code Playgroud)
现在你可以做到
LIST := a_old_tt x_old_da a_new_da q_ty_we
LIST_OLD := $(call containing,old,$(LIST))
LIST_NOT_OLD := $(call not-containing,old,$(LIST))
Run Code Online (Sandbox Code Playgroud)
Make 最大的缺点之一是其处理正则表达式的能力较差。功能filter并filter-out不能在单词中间找到“旧”。我建议这个黑客:
NOT_OLD = $(shell echo $(LIST) | sed 's/[^ ]*old[^ ]* *//g')
OLD = $(filter-out $(NOT_OLD), $(LIST))
Run Code Online (Sandbox Code Playgroud)