我使用GNU make来管理数据处理工作流程,表达10000多个文件和100 + TB的依赖关系。现在我正在使用一个功能来表达Makefile中的非文件目标,例如hdf5中的数据集,sqlite中的表,hdfs中的(非常规)文件等。例如:
# process dataset /src15 in pass1.h5 and save it as /evt15 in pass2.h5.
pass2.h5(/evt15): pass1.h5(/src15)
./process.py $^ -o $@
关闭功能是Archive Members as Targets,但它相当有限,
此构造仅在目标和先决条件中可用,而不是在 食谱!
我转向使用C或scheme的GNU制作扩展程序。但是,本手册中的所有示例都用于自定义功能。一个article表示
将来有可能制作更广泛的插件, 这将使用SHA1哈希而不是时间戳等。暂时 虽然为Makefile添加简单的功能既强大又强大 有趣。
因此,至少对于GNU make 4.0,扩展机制仅限于函数。
问题:
注意:drake支持非文件目标,但lacks pattern rules。明确地写出10000多个食谱是很乏味的,即使是循环。