MSBuild / Visual Studio分布式构建

时间:2009-11-05 16:16:00

标签: c++ msbuild

我开发/维护一个需要很长时间才能构建的应用程序(例如,完整构建需要超过六个小时!)。在花了大部分时间构建我们的应用程序之后,我开始研究改进构建时间的方法。建议on this Stack Overflow question是:

  • 修复编译警告
  • Unity构建(面向开发人员)
  • 分布式构建

我想了解更多关于如何为MSBuild / Visual Studio构建系统执行第三个选项(分布式构建)的信息。

6 个答案:

答案 0 :(得分:16)

请查看Incredibuild的http://www.xoreax.com/。 它不是免费的,但是我们使用它并且非常令人印象深刻。它与Visual Studio完美集成,使用起来非常简单。你可能偶尔会遇到问题,但这绝对值得一看。

安装完成后,在Visual Studio中,原则是使用“使用Incredibuild构建解决方案”菜单项而不是“构建解决方案”。所有需要的文件都透明地传输到远程计算机,然后下载输出文件。

答案 1 :(得分:7)

在过去的十年中,我花费了太多时间,使得C ++构建变得更快,并行构建可以创造奇迹,但简单的事情有时会产生惊人的差异。

你没有说明很多细节,所以我会问......

该项目的规模是多少?多少源文件等。我过去使用的度量标准是每个源模块(.cpp)平均定位一秒。从200到32,000(不是错字!)行的来源,这在我过去作为衡量标准运作良好。

您的构建计算机的规格是什么,它是构建计算机还是同时用于其他工作?傻慢的硬盘,太少的RAM,其他过程使用;所有这些都会对建造时间造成灾难性影响。

您是在构建单片静态库和应用程序吗?如果是这样,有时转换为DLL文件将导致较低的总体构建时间,因为它将使各个链接单元的数量下降。对于使用链接时代码生成的优化构建尤其如此。

您的项目是否有效地使用预编译的标头?如果您的项目设置为自动生成预编译头,那么我断言您应该通过关闭所有预编译的头文件使用来测试构建。在Visual Studio 2003Visual Studio 2005中,我发现这实际上比自动生成更快,更可靠。正确的预编译头文件(由生成并由所有其他文件使用的文件生成)似乎是最佳构建速度的过程。遗憾的是,它是一种真正的黑色艺术,并且在某个项目的生命周期中获得最佳PCH内容有些​​反复试验 - 并且该内容在项目的生命周期内不一定稳定。

除了并行性任务之外,上述内容只会有所帮助。

答案 2 :(得分:1)

调查将项目拆分为可以独立构建的多个项目的可行性。您可以拥有UI项目,数据访问层的DLL项目,业务逻辑等。这应该使调试变得更加容易,并以适合分布式构建的方式构建项目。

答案 3 :(得分:0)

Scott Hanselman发表了一篇关于并行构建的文章here。它不是完全分布式的,但它可能有所帮助。

另请注意,MSBuild本身并不构建C ++项目。它实际上调用了vcbuild为它做了肮脏的工作。

答案 4 :(得分:0)

理论上,使用Visual Studio 2010,您可以编写自己的msbuild任务,可以安排任务并将代码流式传输到其他计算机进行编译。

使用以前版本的Visual Studio,您可以覆盖cl.exe,lib.exe和link.exe并创建自己的包装器。此技术已成功用于添加不受支持的平台类型的编译和链接。

答案 5 :(得分:0)

TeamBuild将为您提供一个与Visual Studio很好地集成的分布式构建系统。