HighTec编译器提高编译速度

当我们工程特别大时(尤其是基于AUTOSAR开发的工程,包含了BSW协议栈及MCAL,ASW的代码其c文件数量级可达上千)全编译一个工程需要很长时间。
HighTec是增量式编译,每次只重新编译修改的.c文件。当我们修改了某个c文件,在编译时make工具会根据c文件之间的依赖关系去编译影响到的c文件,从根本上说这时候编译时间不是我们能左右的。但我们还是可以通过设置Hightec配置来提高编译效率以及避免一些不必要的重复操作,这里提供四个优化思路供参考。
优化方法1:启用平行编译并将CPU核数设置为你电脑的CPU核数量
下图最右可以看到笔者的计算机核数为8,因此将"Use parallel jobs"设置为8从而充分发挥电脑的性能。选项“Stop on first build error”默认是选中状态,这样在编译时一旦出错就会停止继续编译;如果未选中,即使出现编译错误也会继续向下编译其它c文件直到编译结束。
在打开这里插入图片描述
优化方法2:避免每次都生成makefile文件
HighTec在编译时默认是根据工程源文件的组织结构首先生成makefile文件,然后执行“make makefile”指令来开始编译工程,注意是在你每次单击“编译”按钮时每次都会生成makefile文件。如果我们没有在工程中增加或删除c/h文件,每次HighTec生成的makefile是一样的,也即生成makefile步骤是重复执行的,因此我们可以将下图“Generate Makefiles automatically”选型去掉从而避免重复生成makefile。
在这里插入图片描述
但当去掉了“Generate Makefiles automatically”选项之后也会造成一些不便,如果你增加或删除了c/h文件或者执行了Hightec的“Clear All”指令,又不得不把这个选项重新打钩,显然又比较麻烦。因此这里提到的优化方法2请读者自行决定是否启用。
优化方法3:程序模块化,每个模块做成静态库
把程序模块化可以减少编译时间,具体做法是把整个工程按照功能分成若干个模块,每个模块建一个工程,工程设置为生成静态库文件而不是可执行elf文件,如下图。
在这里插入图片描述

另需再建一个集成工程,该集成工程中引用各个模块生成的库(libXXX.a),在该集成工程中编译并链接模块库最终生成可执行代码。关于如何使用库文件,可以参见公众号内另外的文章。https://mp.weixin.qq.com/s/wrtYfscOExRX4UuyhcFeNA
那么为什么这种做法可以减少编译时间呢?其实很容易明白模块化后假如修改了某个模块,只需要重新编译修改的模块和集成工程即可。这样相当于将修改“局部化”了,而不是之前一个修改可能会影响到整个工程。而且静态库只参与最后的Link环节,不需要编译,所以可以提高编译速度。
优化方法4:编译时关掉360等杀毒软件
实际测试发现,编译时关掉360等杀毒软件可以加快编译速度。

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽车电子攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值