将单个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 $<