对多个输入文件应用单个Makefile目标规则



假设我有以下一组输入:

list = foo 
bar 
baz 

假设我有这样一个规则:

$(somedir)/%:
# Do something here

我知道我可以通过静态定义目标及其依赖项来调用规则:

$(somedir)/foo : foo
$(somedir)/bar : bar
$(somedir)/baz : baz

然而,是否有一种方法可以将此规则应用于不断增长的输入$(list),而不必静态地定义它们?

更具体地说,我正在寻找一种方法来运行每个input的规则,并获得输出(这是$(somedir)/input)。这在Make中可能吗?

嗯,我不确定我理解所有的细节,但在我看来,模式规则正是你所需要的:

$(somedir)/%: %
# your recipe

这告诉make任何$(somedir)/foo依赖于foo,并且是由给定的配方构建的。当然,您还需要告诉make要构建哪个目标:

make somedir=there there/foo there/bar

好处:如果你知道列表,你可以添加一个假目标来一次构建它们:

list = foo bar baz
.PHONY: all
all: $(addprefix $(somedir)/,$(list))
$(somedir)/%: %
# your recipe

第二个好处:你可以使用自动变量:$@扩展作为目标,$<作为第一个先决条件,$^作为所有先决条件,等等。所以你的食谱可以像这样:

$(somedir)/%: %
build $@ from $<

最新更新