C++ GNU make-无需修改即可加速非并行makefile
我有一个由一组makefile组成的项目,这些makefile不能与C++ GNU make-无需修改即可加速非并行makefile,c++,build,makefile,gnu-make,C++,Build,Makefile,Gnu Make,我有一个由一组makefile组成的项目,这些makefile不能与make--jobs=N一起运行,因为没有严格地指定依赖项,使得make无法以正确的顺序正确执行配方(即我得到了竞争条件) 我目前正在使用Electric-Cloud.com的Huddle,它正是我所需要的:它解析makefile,然后并行执行作业,并解释未指定的依赖项 问:有没有免费或免费的东西可以做到这一点 是的,我知道我可以重新编写makefile,但是项目管理说“不行” 更新#1 我知道我必须做一些工作来获得类似于电子云
make--jobs=N
一起运行,因为没有严格地指定依赖项,使得make
无法以正确的顺序正确执行配方(即我得到了竞争条件)
我目前正在使用Electric-Cloud.com的Huddle,它正是我所需要的:它解析makefile,然后并行执行作业,并解释未指定的依赖项
问:有没有免费或免费的东西可以做到这一点
是的,我知道我可以重新编写makefile,但是项目管理说“不行”
更新#1
我知道我必须做一些工作来获得类似于电子云的功能
我知道Electric Cloud会解析makefile来查找依赖项,所以使用MakeDependent
不也会完成同样的事情吗
我在想:
makedepend
include
makeall--jobs=64
makedepend
是C/C++特有的:它只在源文件上运行预处理器,并解析任何#include
语句;不是我需要的
我需要这家伙想要的东西:
更新3
makefile“依赖关系图生成器”实际上已经存在
但这对我没有帮助
我的很多菜谱都会创建目录,供其他目标的菜谱使用,有效地使它们成为隐含的先决条件
上面URL中的图形依赖性工具通过解析构建日志的语句来工作,但这些语句并不表示隐式依赖性
即使我尝试使用--dry run
运行我的makefile,构建也会失败,因为一些没有执行的配方-因为它是一个dry run-创建目录,其他调用make
只需要“假装执行”一个配方
更新4
电子云已经制造了Huddle-4本地内核,对任何人来说都是永远免费的。
此外,它们还输出一个.xml文件,其中列出了每个作业的依赖项,因此我可以使用它来修复makefile兼容问题,从而使它们与--jobs
选项兼容
我目前正在使用Electric-Cloud.com的Huddle,它正是我所需要的:它解析makefile,然后并行执行作业,并解释未指定的依赖项
我实际上不知道这些工具,但是你不能为它们提供一个超级makefile,在你的控制下,它澄清了各种目标的内部依赖关系吗
您可能只需要为这些(导入的?)项目目录结构和另一个Makefile
添加一些间接级别
我目前正在使用Electric-Cloud.com的Huddle,它正是我所需要的:它解析makefile,然后并行执行作业,并解释未指定的依赖项
我实际上不知道这些工具,但是你不能为它们提供一个超级makefile,在你的控制下,它澄清了各种目标的内部依赖关系吗
您可能只需要为这些(导入的?)项目目录结构添加一些间接级别,并可能添加另一个
Makefile
。但是,电子云在不提供任何额外功能的情况下工作。我在找一个这样的工具。@Adrian嗯,你不知怎么为那个工具引入了一个主生成文件,是吗?是的,有一个主生成文件。但是我正在做的唯一工作是用emake all
替换make all
。我承认我必须为一个比电子云更免费的解决方案做一些额外的工作@EtanReisner对我的主要问题的评论是正确的:我需要一个工具来自动生成依赖项,然后将其输入到我的makefile中。我尝试编辑你的答案,但猜测它被拒绝,但添加以下内容,我会接受它。“是的,我一直知道这是我必须做的;问题是如何使用工具而不是手动获取信息。答案是Electric Cloud Huddle:对于每个作业,它都输出依赖项,但更重要的是,甚至是隐式依赖项,更具体地说,文件系统I/O依赖项。我可以使用这些信息手动添加作业间依赖项,这样我就可以只make
并行运行构建了。但是,电子云在不提供任何额外功能的情况下工作。我在找一个这样的工具。@Adrian嗯,你不知怎么为那个工具引入了一个主生成文件,是吗?是的,有一个主生成文件。但是我正在做的唯一工作是用emake all
替换make all
。我承认我必须为一个比电子云更免费的解决方案做一些额外的工作@EtanReisner对我的主要问题的评论是正确的:我需要一个工具来自动生成依赖项,然后将其输入到我的makefile中。我尝试编辑你的答案,但猜测它被拒绝,但添加以下内容,我会接受它。“是的,我一直知道这是我必须做的;问题是如何使用工具而不是手动获取信息。答案是Electric Cloud Huddle:对于每个作业,它都输出依赖项,但更重要的是,甚至是隐式依赖项,更具体地说,文件系统I/O依赖项。我可以使用这些信息手动添加作业间依赖项,这样我就可以make
并行运行我的构建”您不必重写现有的makefile来添加依赖项信息。如果可以手动(或自动生成)指定信息,则可以在一个或多个附加的makefile中添加这些信息。这可以是“自动”的,因为您可以聪明地发现依赖项。这最终是w