同时从两个变量自动化makefile中的规则
我有一些搜索模式不适合作为结果文件名的一部分。因此,我将正则表达式和相应的文件名部分拆分为两个不同的变量,如下所示。如何实现以下操作的自动化,从而不必手动列出所有文件,也不必手动输入运行grep的规则同时从两个变量自动化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
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.$(文件))”是有效的。虽然不像我希望的那样完全自动化,但这至少比使用重复的规则要好得多。非常感谢。