使gprbuild默认为并行构建?

时间:2014-05-17 23:17:24

标签: ada

如何使gprbuild默认执行并行构建?它不再是1990年了,拥有所有这些备用内核,并且不想继续在命令行中添加-j0

根据我对文档的理解,这应该有效:

package Builder is
    for Default_Switches("Builder") use ("-j0");
end Builder;

......但事实并非如此;它被忽略了。我已经看到了Default_Switches("Ada")应该工作的互联网的提及,但所有这一切都是将--jobs选项传递给GNAT,这当然是错误的。

1 个答案:

答案 0 :(得分:5)

除了gprbuild之外,我在-j的来源中没有看到可以控制作业数量的任何地方。

但是,documentation表明您可以使用“聚合项目”获得所需的效果。我把我的一个项目文件包装成一个像这样的聚合:

aggregate project Gnat_Util_Aggregate is
   for Project_Files use ("gnat_util.gpr");
   package Builder is
      for Switches (others) use ("-j0");
   end Builder;
end Gnat_Util_Aggregate;

在这个13“Macbook Pro上构建普通项目的时间是

   70.17 real        66.33 user         2.85 sys

以及聚合项目构建

   35.46 real       119.05 user         4.80 sys

(我不知道“用户”的含义是什么意思!但我检查了“真实”的值,它们与我的手表相匹配。)

我已经将上面的GPRBuild文档链接(它显示为for Switches (other),应该是others)报告给AdaCore。

更新:遵循大卫的合理投诉,并且在预感中,我在我的简单项目中尝试了这个package Builder技巧,并且它有效。我仍然没有看到源头发生这种情况。

有关信息,未记录的切换-dm报告同时编辑的最大数量(gnatmakegprbuild)。