当我们工程特别大时(尤其是基于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等杀毒软件可以加快编译速度。

HighTec编译器提高编译速度相关推荐

  1. iOS - Xcode提高编译速度,增量编译,ccache

    前言 贝聊目前开发的两款App分别是贝聊家长版和贝聊老师版,最近因为在快速迭代开发新功能,项目规模急速增长,单个端业务代码约23万行,私有库约6万行,第三方库代码约15万行,单个客户端的代码行数约60 ...

  2. 提高编译速度的方法——ccache的使用

    在使用CMake编译大型工程时.如果每次只是单独对一个文件进行修改还好,CMake可以针对修改单独编译,但往往只要对CMakeLists做一点小修改,整个工程就要重新编译,对于普通性能的电脑来说通常非 ...

  3. 使用预编译头提高编译速度

    什么是预编译头 在介绍预编译头之前,有必要了解一下C/C++的编译方式.C/C++的编译单元是源文件(带有.c..cc..cpp等扩展名的文件),在编译一个源文件之前,预处理器会把这个源文件中所有通过 ...

  4. Win10 WSL编译Android开启ccache(提高编译速度)

    当你删掉out/target目录或者使用make clean清空输出重新编译源码的时候,编译时间通常都很漫长. 其实这个问题很容易解决,Android官方为我们带来了解决方案–ccache编译器缓存. ...

  5. linux qt jom,Qt Creator 使用技巧之提高编译速度【使用jom参数】

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/hsshh1988/article/de ...

  6. jom qt linux,Qt Creator 使用技巧之提高编译速度【使用jom参数】

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/hsshh1988/article/de ...

  7. 在VS中设置预编译头从而提高编译速度

  8. 如何快速提高英飞凌单片机编译器 TASKING TriCore Eclipse IDE 编译速度

    1.前言 使用英飞凌单片机编译器 TASKING TriCore Eclipse IDE 开发编译时,想必感受最深刻的就是编译速度,那是非常慢了,如果是部分修改的源文件编译还好,不用等太久,而如果选择 ...

  9. 【转】Linux程序编译速度提高方法

    项目越来越大,每次需要重新编译整个项目都是一件很浪费时间的事情.Research了一下,找到以下可以帮助提高速度的方法,总结一下. tmpfs 有人说在Windows下用了RAMDisk把一个项目编译 ...

最新文章

  1. Sql存储过程加密和解密
  2. 漫谈MySQL索引与字段儿长度的关系
  3. Vertx编程风格:您的反应式Web Companion REST API解释了
  4. JUnit5 测试套件示例
  5. 从C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\mt.exe返回错误
  6. leetcode955. Delete Columns to Make Sorted II
  7. bookStore项目总结
  8. Vue动态设置Style属性
  9. 写作一篇SCI的13个要点(也适用社会科学SSCI)
  10. 关于阿里云ICON矢量图SVG上传问题
  11. latex中的对与错(对号与叉号)
  12. win10锁屏账户和计算机名,如何玩转Win10锁屏和主题
  13. html磁贴模板,文本磁贴模板(列表文件夹)(HTML)
  14. excel 对列数据进行去重操作
  15. 电离释放型动态水处理器
  16. 线段树维护(最大区间和,最大子段和,最长连续上升子序列)
  17. 用html语言设计李白的一首诗,李白诗《赠汪伦》教学设计
  18. Javaweb——监听器
  19. java批量去除pdf签名,删除签名图标
  20. HP刀片服务器更换两个硬盘后无法引导启动

热门文章

  1. 灵动微MM32SPIN560C的低压无刷电机应用方案
  2. Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27
  3. 小程序input调用虚拟键盘阻止系统键盘与虚拟键盘点击穿透问题
  4. nkoj P8845 过滤空格
  5. android整机测试用例,Android_TestCase(测试用例)
  6. Shopee虾皮网|打造Shopee爆款前,必须分析七大数据!
  7. IT 从业者应该了解的著作权知识
  8. 手机android的文件怎么恢复,如何恢复安卓手机内置存储中已删除的文件
  9. PCIe及USB传输速度小结
  10. linux怎么安装smp系统,linux SMP系统学习笔记