Makefile:如何在多个通配符上应用等效过滤器

use*_*361 5 makefile wildcard filter

我正在写一个Makefile,我陷入过滤器功能限制.实际上,过滤器只需要一个通配符.

我想做的是:我有一个列表文件,一些匹配正则表达式blabla,一些不匹配.但为此我需要2个通配符,因此我不能使用过滤功能.

我想将原始列表拆分为2个列表,一个包含所有包含blabla字符串的元素(过滤器等效),另一个包含不匹配的列表(过滤掉的等价物).

谢谢你的帮助.

Ide*_*lic 9

您无需运行任何外部命令即可完成此操作.定义两个宏

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)


Bet*_*eta 3

Make 最大的缺点之一是其处理正则表达式的能力较差。功能filterfilter-out不能在单词中间找到“旧”。我建议这个黑客:

NOT_OLD = $(shell echo $(LIST) | sed 's/[^ ]*old[^ ]* *//g')
OLD = $(filter-out $(NOT_OLD), $(LIST))
Run Code Online (Sandbox Code Playgroud)