incrediBuild踩坑笔记
软件介绍
IncrediBuild是一款编程开发工具,可加快C/C++ 的编译和创建速度。能无缝集成到Visual Studio开发环境中,采用Xoreax 的多线程处理技术,不必改变项目文件的代码。
https://baike.baidu.com/item/Xoreax%20IncrediBuild
编译速度慢向来是C++/C程序语言的一个最大的弱点.开发者花费几个小时在工作站上等待整个产品的创建,或者一天好多次花十分钟等待不断增加的编译的完成—工作效率很低而且浪费时间.
IncrediBuild对此首次提供了独特有效的解决方案.通过使用Xoreax分布式编译(多线程处理)技术, Visual Studio project的编译速度将大大提高,而且不必改变项目文件代码
IncrediBuild无缝集成到Visual Studio开发环境,并且有很强的命令行界面,大大增强了Microsoft Visual Studio开发环境.
项目背景:
随着客户端插件增多,现在客户端编译越来越慢,目前我们项目fast的代码通过Jenkins进行自动化构建需要30多分钟。对于现在的敏捷开发流程有严重的影响,需要进行优化。
初步尝试:
软件可以通过互联网下载和安装。
参考https://blog.csdn.net/lindexi_gd/article/details/79399623
- 初步尝试了incredibuild9_45.exe,但是目前只支持最高的vs版本是vs2013,目前我们使用了vs2015+qt5.8.0,所以无法使用。故尝试了incredibuild8,但是目前其license试用版本无法在我们的云桌面注册和使用,故放弃。
- 尝试了其他分布式编译软件如fastbuild,学习和使用成本太高,入门门槛太高,不适用于现在的开发模式。有预算的话,建议买IncrediBuild。
- 联系IncrediBuild公司在中国的代理公司, 其提供了incredibuild9_50版本,兼容vs2015。
- 尝试在云桌面安装,使用其提供的license,可以注册,但是无法作为coordinator和agent进行通信。尝试失败。具体原因是云桌面无法开通30010等端口。
- 联系IncrediBuild,其提供了离线版本的license,和硬件绑定使用。注册了53.14的编译机作为coordinator
离线IncrediBuild软件license需要和指定机器绑定,故目前只能通过53.14作为编译机的master进行构建。
环境及软件项目现状
环境
A、系统 Windows7及以上
B、 16c 32G 1台 物理机
C、 winserver 2008 16c 32G 物理机
D、 win 7 8c 32G 虚拟机 3台
项目结构:
5个基础库
196个插件库-之间无依赖,绝对适合分布式并行编译。
价格
价格: 120$ * 16core * 6台 * 5年 = 48000$
结合vs编译
安装IncrediBuild时,自动安装vs插件,无需二次安装,方便使用。通过菜单栏IncrediBuild进行编译,监视框位于下方。
TIPS: 必须生成solution才可以进行编译。
且需要配置profile,如下:
Profile需要和工程名同步,命名为 [solutionname].ib_profile.xml,放置于sln文件的相同路径下。
结合Jenkins编译
整体编译
结合solution vs进行编译,先手工生成solution,进行编译。
提交代码库自动构建时,有问题,生成的vcxproj文件里的路径是绝对路径,无法进行适配,故需要自动生成的vcxproj。具体命令是
qmake -r -tp vc ../modules/modules.pro
注意上述命令的 –r,是遍历生成所有的sln和vcxproj,否则只能生成当前路径下的。
在进行编译时,直接编译modules.sln时,会有问题
buildconsole ./modules.sln /cfg="Release|x64" /openmonitor /MAXCPUS=256 /rebuild /title="FAST_CLIENT"
因为这个IncrediBuild有个bug,就是无法有效识别依赖关系,根源是sln中无依赖关系,即qmake生成 sln时,没有将依赖关系同步到sln中,具体愿意需要排查下sln的机制。
顺序编译
取消编译modules.sln整体,改为顺序编译,先编译基础库,再编译应用插件库。
buildconsole "./shareinclude/shareinclude.sln" /cfg="Release|x64" /MAXCPUS=256 /rebuild /title="FAST_CLIENT11"
buildconsole "./platform/platform.sln" /cfg="Release|x64" /rebuild /title="FAST_CLIENT11" /MAXCPUS=256 /profile="c:/modules.ib_profile.xml"
buildconsole "./InstructionManager/InstructionManager.sln" /cfg="Release|x64" /MAXCPUS=256 /rebuild /title="FAST_CLIENT11"
buildconsole "./fast/fast.sln" /MAXCPUS=256 /openmonitor /cfg="Release|x64" /rebuild /title="FAST_CLIENT11" /profile="c:/modules.ib_profile.xml"
实测效果
改造前:
改造后:
推广建议
Windows下客户端编译效果提升明显,提升由28分钟提升到9分钟,时间缩短67%。有效提升了客户端编译及发布效率。
基于此效果,可以在linux下进行使用,有效提升linux下的编译效率。