假设我有以下一组输入:
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 $<