我想使用单个Makefile在数百个子目录中生成目标。每个子目录都是这样的日期/时间戳:20120119_153957
,它与以下模式????????_??????
匹配。没有其他子目录符合此模式。
我想要生成的一个目标称为????????_??????/graph.pdf
。我有一个名为make_graph
的脚本,它将使图形具有子目录名称。但我不确定如何编写一个Makefile,它将自动为所有子目录添加并以编程方式生成这些目标。
例如,代码SUBDIRS:=????????_??????
似乎正确地遍历所有子目录。我可以查看这条规则:
.PHONY: print
print:
echo $(SUBDIRS)
然而这个变量赋值
TARGETS:=$(SUBDIRS:%=%/graph.pdf)
似乎没有达到我的预期,并分配了很多很多目标。相反,以下规则只打印一个目标。
.PHONY: print
print:
echo $(TARGETS)
SUBDIRS
应该有正确的子目录,但TARGET
只有一个文件,这是非常令人困惑的。
答案 0 :(得分:17)
在您的示例中,由shell执行glob匹配。
GNU Make有内置的wildcard
function,您可以按如下方式使用:
SUBDIRS := $(wildcard ????????_??????)
现在您可以使用此变量构建目标列表:
.PHONY : all
all : $(SUBDIRS:%=%/graph.pdf)
%/graph.pdf : # list prerequisites here.
# recipe to make '$@' in directory '$(@D)' from '$^'.