makefile,一对多到一个文件?

时间:2015-01-15 13:42:31

标签: makefile

我想使用每个中间文件的并行处理将列表生成的文件处理成摘要。 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做到这一点?

1 个答案:

答案 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