Nat*_*ton 11 makefile gnu-make
我想使用单个Makefile在数百个子目录中生成目标.每个子目录都是一个日期/时间戳,如下所示:20120119_153957匹配以下模式????????_??????.没有其他子目录与此模式匹配.
我想要生成一个目标????????_??????/graph.pdf.我有一个调用的脚本make_graph,它将使图形被赋予子目录名称.但我不确定如何编写一个Makefile,它将自动为所有子目录添加并以编程方式生成这些目标.
例如,代码SUBDIRS:=????????_??????似乎正确地遍历所有子目录.我可以查看这个规则:
.PHONY: print
print:
echo $(SUBDIRS)
Run Code Online (Sandbox Code Playgroud)
但是这个变量赋值
TARGETS:=$(SUBDIRS:%=%/graph.pdf)
Run Code Online (Sandbox Code Playgroud)
似乎没有做我期望的事情并分配了很多很多目标.相反,以下规则只打印一个目标.
.PHONY: print
print:
echo $(TARGETS)
Run Code Online (Sandbox Code Playgroud)
SUBDIRS应该拥有正确的子目录但TARGET只有一个文件是非常令人困惑的.
Eld*_*mov 18
在您的示例中,由shell执行glob匹配.
GNU Make具有内置wildcard函数,您可以使用如下:
SUBDIRS := $(wildcard ????????_??????)
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用此变量构建目标列表:
.PHONY : all
all : $(SUBDIRS:%=%/graph.pdf)
%/graph.pdf : # list prerequisites here.
# recipe to make '$@' in directory '$(@D)' from '$^'.
Run Code Online (Sandbox Code Playgroud)