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

将单个Makefile目标规则应用于多个输入文件,makefile,Makefile,假设我有以下一组输入: list = foo \ bar \ baz 假设我有一条规则如下: $(somedir)/%: # Do something here 我知道我可以通过静态定义目标及其依赖项来调用规则: $(somedir)/foo : foo $(somedir)/bar : bar $(somedir)/baz : baz 然而,是否有一种方法可以将此规则应用于不断增长的$(列表)输入,而不必静态地定义它们 更具体地说,我正在寻找一种方法,为每个输入运行一个规则,并获

假设我有以下一组输入:

list = foo \
bar \
baz 
假设我有一条规则如下:

$(somedir)/%:
   # Do something here
我知道我可以通过静态定义目标及其依赖项来调用规则:

$(somedir)/foo : foo
$(somedir)/bar : bar
$(somedir)/baz : baz
然而,是否有一种方法可以将此规则应用于不断增长的
$(列表)
输入,而不必静态地定义它们


更具体地说,我正在寻找一种方法,为每个
输入运行一个规则,并获得一个输出(即$(somedir)/
输入
)。这在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 $<