同时从两个变量自动化makefile中的规则

同时从两个变量自动化makefile中的规则,makefile,Makefile,我有一些搜索模式不适合作为结果文件名的一部分。因此,我将正则表达式和相应的文件名部分拆分为两个不同的变量,如下所示。如何实现以下操作的自动化,从而不必手动列出所有文件,也不必手动输入运行grep的规则 SEARCH_RE = test a/b/c a.*b SEARCH_FILE = test abc ab ALL = result.test result.abc result.ab all: $(ALL) result.test: grep test i

我有一些搜索模式不适合作为结果文件名的一部分。因此,我将正则表达式和相应的文件名部分拆分为两个不同的变量,如下所示。如何实现以下操作的自动化,从而不必手动列出所有文件,也不必手动输入运行grep的规则

SEARCH_RE   = test  a/b/c  a.*b
SEARCH_FILE = test  abc    ab

ALL = result.test result.abc result.ab

all: $(ALL)

result.test:
        grep test  inputfile > result.test

result.abc:
        grep a/b/c inputfile > result.abc

result.ab
        grep a.*b  inputfile > result.ab

我不知道如何创建规则,但是
ALL
目标非常简单:

ALL = $(patsubst %,result.%,$(SEARCH_FILE))
我推荐

ALL = $(addprefix result.,$(SEARCH_FILE)) 全部=$(添加前缀结果,$(搜索文件)) 至于编写规则,我认为你想要的那种查找可以在Make中完成,但实际上不应该这样——这将是一个可怕的乱码。我建议这样做:

result.test: TARG = test result.abc: TARG = a/b/c result.ab: TARG = a.*b $(ALL): grep $(TARG) inputfile > $@ 结果.测试:TARG=测试 结果abc:TARG=a/b/c result.ab:target=a.*b $(全部): grep$(TARG)输入文件>$@
好。我还发现“ALL=$(foreach文件,$(SEARCH\u文件),result.$(文件))”是有效的。虽然不像我希望的那样完全自动化,但这至少比使用重复的规则要好得多。非常感谢。