我开发/维护一个需要很长时间才能构建的应用程序(例如,完整构建需要超过六个小时!)。在花了大部分时间构建我们的应用程序之后,我开始研究改进构建时间的方法。建议on this Stack Overflow question是:
我想了解更多关于如何为MSBuild / Visual Studio构建系统执行第三个选项(分布式构建)的信息。
答案 0 :(得分:16)
请查看Incredibuild的http://www.xoreax.com/。 它不是免费的,但是我们使用它并且非常令人印象深刻。它与Visual Studio完美集成,使用起来非常简单。你可能偶尔会遇到问题,但这绝对值得一看。
安装完成后,在Visual Studio中,原则是使用“使用Incredibuild构建解决方案”菜单项而不是“构建解决方案”。所有需要的文件都透明地传输到远程计算机,然后下载输出文件。
答案 1 :(得分:7)
在过去的十年中,我花费了太多时间,使得C ++构建变得更快,并行构建可以创造奇迹,但简单的事情有时会产生惊人的差异。
你没有说明很多细节,所以我会问......
该项目的规模是多少?多少源文件等。我过去使用的度量标准是每个源模块(.cpp)平均定位一秒。从200到32,000(不是错字!)行的来源,这在我过去作为衡量标准运作良好。
您的构建计算机的规格是什么,它是仅构建计算机还是同时用于其他工作?傻慢的硬盘,太少的RAM,其他过程使用;所有这些都会对建造时间造成灾难性影响。
您是在构建单片静态库和应用程序吗?如果是这样,有时转换为DLL文件将导致较低的总体构建时间,因为它将使各个链接单元的数量下降。对于使用链接时代码生成的优化构建尤其如此。
您的项目是否有效地使用预编译的标头?如果您的项目设置为自动生成预编译头,那么我断言您应该通过关闭所有预编译的头文件使用来测试构建。在Visual Studio 2003和Visual 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很好地集成的分布式构建系统。