【问题标题】:Make: setting up build environment for multi-directory research workflows [closed]Make:为多目录研究工作流程设置构建环境 [关闭]
【发布时间】:2014-08-25 17:46:54
【问题描述】:

这个问题源于我之前的问题(并在 cmets 中对此进行了讨论)关于我使用基于make构建环境 用于基于R科研软件 项目(我的博士论文):make always rebuilds Makefile targets

根据@MadScentist 的建议,我创建了这个问题来阐明我的构建环境的以下方面。由于我在项目的几乎所有子目录中都使用了Makefile 文件,因此我的研究工作流程依赖项 遇到了正确规范 的问题。虽然工作流程本身非常标准(数据收集 => 数据准备(转换、清理、合并、采样)=> 数据分析 => 结果展示),恕我直言,问题源于需要指定位于不同目录的工件之间的构建依赖关系(以及不同类型,即单个中间文件依赖于一个集合数据文件等)。我在任何地方都没有找到任何文档或对此问题的解决方案的明确解释。

非常感谢您的帮助!

更新:重新表述问题的标题以澄清问题。

【问题讨论】:

  • 这里有问题吗?
  • @Spacedman:当然!问题(换句话说)是如何为基于make 的构建环境正确指定目录间工件链依赖关系。有关示例,请参阅链接的问题。
  • 我不应该看到链接的问题。 SO q 应该非常独立、清晰、简洁,具有代表性的样本或结构。如果您的 Q 是“如何正确指定目录间等”,请对其进行编辑以询问。目前标题太笼统,正文太杂乱无章。
  • @Spacedman:我的问题是独立的。提供指向我的另一个问题的链接仅仅是因为它是相关的。至于提问的方式,我认为这是个人问题。 “简洁”是一个相对术语。每个人对它都有自己的定义,更何况简洁的程度取决于问题和上下文。如果您不喜欢我的问题的风格,请随意不要赞成甚至反对。恕我直言,我认为我不必因为一条评论而更改问题的标题和/或正文。感谢您的理解。
  • 请注意,对于科学工作流程,make 存在一些难以解决的问题:bionics.it/posts/the-problem-with-make-for-scientific-workflows。还有其他一些限制较少的工具,例如 bpipe、nextflow 和 snakemake。

标签: r makefile dependencies workflow


【解决方案1】:

据我所知,这个问题没有解决方案。这就是为什么写'Recursive Make Considered Harmful' 论文的原因。

如果您需要对象级别的目录间依赖关系,则不能以这种方式使用每个目录的 Makefile:s。使用 per-directory makefile:s 您只能手动同步运行 make 命令的顺序。 (您可能至少可以通过使用每个目标每个目录的标记文件和每个makefile中的转发规则来伪造至少一些按需构建,但它可能会很快变得丑陋和笨拙,并且可能无法与多个目录一起使用给定级别。)

【讨论】:

  • 感谢您的回答和论文链接。我马上就读。但是,从已经阅读摘要来看,似乎单个项目范围的 Makefile 文件可能是我正在寻找的解决方案。附言就作者对 make 在资源方面的批评而言,这个项目对我来说似乎并没有那么大,担心 make 构建基础设施开销(时间、资源)会不合理。
  • 递归调用 make 通常会显着增加构建过程的时间,但依赖关系破坏与您的问题更相关。任何本身足够长的进程都会使任何开销递归 make 无论如何添加都相形见绌。
  • 我倾向于单一项目范围的Makefile 解决方案。不过,我也想等着听听@Spacedman 的意见。
  • @AleksandrBlekh 在阅读了那篇论文后,在工作中实施了一个项目范围的Makefile 解决方案,我可以告诉你,以一种简单的方式去做需要一些努力,但它教会了我更多关于如何使工作以及如何将各个部分链接在一起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
相关资源
最近更新 更多