繁体   English   中英

GNU make - 无需修改即可加速非并行makefile

[英]GNU make - accelerate non-parallel makefile without modification

我有一个包含一组makefile的项目,这些makefile不能用make --jobs=N运行,因为依赖关系没有足够严格地指定make以正确的顺序正确执行配方(即我得到竞争条件)。

我目前正在使用Electric-Cloud.com的Huddle,它完全符合我的需要:它解析makefile,然后并行执行作业并解释未指定的依赖项。

问题:是否有免费或免费的东西可以做到这一点?

是的我知道我可以重新编写makefile,但项目管理人员说“没办法”。

更新#1

我知道我必须做一些工作才能获得类似于Electric-Cloud功能的功能。

我知道Electric-Cloud会解析makefile以找到依赖关系,所以使用makedepend不会完成同样的事情吗?

我在想:

  1. 在现有的makefile上运行makedepend
  2. 使用include <makedepend.output>输入输出
  3. make all --jobs=64

更新2

结果makedepend特定于C / C ++:它只运行源文件上的预处理器并解析任何#include语句; 不是我需要的。

我需要这个人要求的东西: 构建一个makefile依赖/继承树

更新3

makefile“依赖图生成器”实际上已经存在

http://plindenbaum.blogspot.com/2012/11/visualizing-dependencies-of-makefile.html?m=1

但这对我没有帮助。

我的许多食谱都创建了目录,这些目录由其他目标的食谱使用,有效地使它们成为隐含的​​先决条件。

上述URL的图形依赖关系工具通过解析构建日志的语句来工作,但这些语句并不表示隐式依赖关系。

即使我尝试使用--dry-run运行我的makefile,构建--dry-run失败,因为一些未执行的配方 - 导致它是干运行 - 创建其他make调用只需要'假装执行'的目录食谱。

更新4

Electric-Cloud已经使Huddle - 4个本地核心,非群集 - 永远免费为任何人。 此外,它们输出一个.xml文件,列出每个作业的依赖项,以便我可以使用它来修复我的makefile兼容,这样它们就与--jobs选项兼容。

我目前正在使用Electric-Cloud.com的Huddle,它完全符合我的需要:它解析makefile,然后并行执行作业并解释未指定的依赖项。

我实际上不了解这些工具,但你不能在他们的控制下为他们提供一个超级makefile ,这澄清了各种目标的内在依赖性吗?

您可能只需要为这些(导入的?)项目目录结构和另一个Makefile添加一些间接级别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM