如何从Makefile中的目标列表创建规则?

如何从Makefile中的目标列表创建规则?,makefile,templating,Makefile,Templating,我的项目由一些配置文件组成,它们是从相应的模板生成的。e、 g.foo.tmpl=>foo。现在我希望编写一个Makefile,它可以从模板生成相应的文件 我不能有这样的东西: % : %.tmpl generate-from-tmpl $< 我想要的东西看起来像: $(foreach GENERATED_FILES) : $@.tmpl generate-from-tmpl $< $(foreach生成的_文件):$@.tmpl 从tmpl生成$< 我怎样

我的项目由一些配置文件组成,它们是从相应的模板生成的。e、 g.
foo.tmpl
=>
foo
。现在我希望编写一个Makefile,它可以从模板生成相应的文件

我不能有这样的东西:

% : %.tmpl
    generate-from-tmpl $<
我想要的东西看起来像:

 $(foreach GENERATED_FILES) : $@.tmpl
     generate-from-tmpl $<
$(foreach生成的_文件):$@.tmpl
从tmpl生成$<

我怎样才能做到这一点?谢谢。

%:%.tmpl
将尝试将目标
%
与任何目标名称匹配,但如果不存在匹配的
%.tmpl
文件,则make将完全跳过该目标的模式

我相信这正是你想要的。你有什么理由不这么认为吗

也就是说,如果你想更具体,你想要的是:


而不是shell和
find
(也有递归的make通配符定义,但是如果需要的话,
find
是合理的)。

我误解了
%的含义:%.tmpl
。但多亏了你的回答,我的困惑才得以解决。非常感谢。
 $(foreach GENERATED_FILES) : $@.tmpl
     generate-from-tmpl $<
$(GENERATED_FILES) : % : %.tmpl
        generate-from-tmpl $<
TEMPLATED_FILES=$(wildcard *.tmpl)