Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GNU make-无需修改即可加速非并行makefile_C++_Build_Makefile_Gnu Make - Fatal编程技术网

C++ GNU make-无需修改即可加速非并行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 我知道我必须做一些工作来获得类似于电子云

我有一个由一组makefile组成的项目,这些makefile不能与
make--jobs=N
一起运行,因为没有严格地指定依赖项,使得
make
无法以正确的顺序正确执行配方(即我得到了竞争条件)

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

问:有没有免费或免费的东西可以做到这一点

是的,我知道我可以重新编写makefile,但是项目管理说“不行”

更新#1

我知道我必须做一些工作来获得类似于电子云的功能

我知道Electric Cloud会解析makefile来查找依赖项,所以使用
MakeDependent
不也会完成同样的事情吗

我在想:

  • 在现有的makefile上运行
    makedepend
  • 使用
    include
  • makeall--jobs=64
  • 更新2

    原来
    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