Ada 是否将gprbuild默认为并行生成?
如何使gprbuild默认为并行构建?现在已经不是1990年了,我有所有这些备用内核,不想继续在命令行中添加Ada 是否将gprbuild默认为并行生成?,ada,Ada,如何使gprbuild默认为并行构建?现在已经不是1990年了,我有所有这些备用内核,不想继续在命令行中添加-j0 根据我对文件的理解,这应该是可行的: package Builder is for Default_Switches("Builder") use ("-j0"); end Builder; ……但事实并非如此;它只是被忽略了。我在互联网上看到有人提到,Default\u Switches(“Ada”)应该可以工作,但所做的只是将--jobs选项传递给GNAT,这当然是错
-j0
根据我对文件的理解,这应该是可行的:
package Builder is
for Default_Switches("Builder") use ("-j0");
end Builder;
……但事实并非如此;它只是被忽略了。我在互联网上看到有人提到,
Default\u Switches(“Ada”)
应该可以工作,但所做的只是将--jobs
选项传递给GNAT,这当然是错误的。我在gprbuild
的源代码中没有任何地方可以控制作业的数量,除了-j
然而,报告建议您可以使用“聚合项目”获得想要的效果。我将我的一个项目文件打包在一个聚合中,如下所示:
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英寸MacBookPro的plain项目的开发时间是
70.17 real 66.33 user 2.85 sys
对于聚合项目构建
35.46 real 119.05 user 4.80 sys
(我不知道“用户”值是什么意思!但我检查了“真实”值,它们与我的手表匹配。)
我已经向AdaCore报告了上面GPRBuild文档链接上的错误(上面说交换机(其他),应该是其他
)
更新:根据David的合理投诉,凭直觉,我在我的普通项目中尝试了这个packagebuilder
技巧,效果很好。我仍然不知道这在源头上发生了什么
有关信息,undocumented switch
-dm
报告同时编译的最大数量(在gnatmake
和gprbuild
中)。垃圾桶,谢谢。令人惊讶的是,使用4个内核完成这项工作所需的CPU总时间是仅使用一个内核所需时间的两倍。通信/缓存未命中/等待磁盘,我想。谢谢(尽管使用聚合项目只是传递参数真的很难看)。奇怪的是,这里没有内部选项。:blush:(尽管考虑到缺乏文档,我并不觉得太糟糕)。请看更新后的答案,了解好消息。是的,效果很好。非常感谢!现在,如果-p
也在那里工作的话。。。