我想使用每个中间文件的并行处理将列表生成的文件处理成摘要。 make可能非常适合这个。
让我们举一个例子:给出一个网址列表,下载文件,并行处理它们,并从处理过的文件中生成一个报告。
示例(赢得了工作):
all : report_file
report_file : $(wildcard data/*.processed)
...
data/%.processed : data/%.input
... # this should be processed in parallel
data/%.input : filelist
download all lines of filelist to N files.
filelist :
generate_list url_file > $@
我希望每个文件的处理(也许是下载)要并行完成,而且我不知道将在文件列表中生成多少行。
这不会起作用,因为处理后的文件在运行时不存在,因此构建报告的规则将被赋予空输入。
另外,避免下载超过1天的文件并因此不处理它们会很有用,所以像依赖这样的makefile在这里有用。
我可以从列表中生成一个特殊的makefile,但有没有办法用一个makefile做到这一点?
答案 0 :(得分:0)
由于在之后 之后无法评估report_file
的依赖关系,因此您需要再次刷新此信息。我知道的唯一方法就是调用子制作。
all: filelist
$(MAKE) $(shell cat $<) #make data/a.processed data/b.processed etc...
$(MAKE) report_file
report_file : $(wildcard data/*.processed)
...
data/%.processed : data/%.input
... # this should be processed in parallel
data/%.input :
download all lines of filelist to N files.
filelist :
generate_list url_file > $@ #url list
sed -i 's;\(.*\);\1.processed;g' $@ #append .processed to all urls