如何使gprbuild默认执行并行构建?它不再是1990年了,拥有所有这些备用内核,并且不想继续在命令行中添加-j0
。
根据我对文档的理解,这应该有效:
package Builder is
for Default_Switches("Builder") use ("-j0");
end Builder;
......但事实并非如此;它被忽略了。我已经看到了Default_Switches("Ada")
应该工作的互联网的提及,但所有这一切都是将--jobs
选项传递给GNAT,这当然是错误的。
答案 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
报告同时编辑的最大数量(gnatmake
和gprbuild
)。