热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何提高工程编译速度

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~     文章首发  公众号——Pou光明公众号还在维护,大家莫慌~LinuxQt平台为例测试编译


点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~         文章首发   公众号—— Pou光明


公众号还在维护,大家莫慌~


Linux Qt 平台为例测试


编译总量 = 编译速度 * 编译时间


按照上面等式进行优化,则:


在编译总量不变的前提下,要减少编译时间,则可提升编译速度;


或在编译速度不变的情况下,较少编译总量;


再或者既减少编译总量又提高编译速度。


C/C++ 编译特点


C/C++ 编译单位是文件,无法进行跨模块优化, C++20 可支持。


将.o文件链接在一起时很难并行。


预处理过程可并行进行。


提高编译速度


1 减小编译总量


包含大量头文件会导致预处理时间变长,针对此尽量使用前置声明。


Pimpl(Private Implementation)模式与不透明指针。


高内聚、低耦合,减少模块间的依赖。


删除不必要的头文件。


2 提高编译速度


在提升编译速度上,可以增加编译机器数量或者提高单机编译能力。针对整体工程。


2.1 提高单机编译能力


多核编译


make -j*


#减少重复编译相同代码的时间


ccache  


解决IO瓶颈,充分利用内存资源,头文件非常多,预处理时需要反复从磁盘读取文件


tmpfs 


2.2 使用多机进行


distcc :分布式编译,利用多台计算机资源共同编译一个程序,


可用于内核或者大型程序(**未做测试 **) ,简单讲链接过程在主机进行。


icecc : distcc升级版


Qt 多核编译与 ccache 使用具体操作流程


1  Qt 设置多核编译


Qt侧边栏 Projects -> Build -> Build Steps



注意虚拟机配置核数。


2  ccache 安装及配置步骤


2.1 ccache安装


sudo apt-get install ccache   


ccache -V 可查看是否安装成功


安装完成后默认缓存路径为~/.ccache ,默认缓存空间配置为 5G


2.2 Qt中配置 ccache


#Qt pro中添加  


equals(COMPILE,2){


QMAKE_CXX = ccache g++


}


需在Qt->Projects->Build Steps->Additionals arguments 配置变量,如图 



注:使用软链接、配置环境变量等方式无法完成Qt自动使用 ccacheqmake 生成的 Makefile 中未使用 ccache.


Qt 使用分布式编译 icecc 具体操作流程


1 Qt 设置多核编译,设置如上


2.1 1 icecc gui 工具安装


sudo apt-get install icecc


sudo apt install icecc-monitor # 在终端使用 icemon 命令进行查看


#开机后 icecc-scheduler( 调度器 ) 可自动启动,如未启动,可使用 systemctl start icecc-scheduler 命令启动


一个调度器,两个编译机图示。



2.2 icecc 相关设置


如果在ui工具中无法搜索到调度机与客户机,可使用下面命令查看防火墙状态。如果状态为 inactive ,则无需进行其他设置。


sudo ufw status # Status: inactive


如果状态为active,则需添加相关端口。


sudo ufw allow 10245/tcp # 添加 TCP/10245 端口


TCP/10245 on the daemon computers (required)


TCP/8765 for the the scheduler computer (required)


TCP/8766 for the telnet interface to the scheduler (optional)


UDP/8765 for broadcast to find the scheduler (optional)


Qt 中使用 icecc


#Qt pro中添加


equals(COMPILE,2){


QMAKE_CXX = icecc g++


}


Qt使用 iceccccache


Qt pro中添加  


equals(COMPILE,2){


QMAKE_CXX = icecc ccache g++


}


icecc不同电脑间组成局域网


1 虚拟机开发环境相关设置(VMWare为例 )


1.1 查看 windows 无线网卡


ipconfig /all


无线局域网适配器 描述如 Intel(R) Wi-Fi 6 AX200 160MHz


1.2 设置 VMWare Vmnet 信息


编辑->虚拟网络编辑器 -> 更改设置 -> 设置桥接模式 -> 已桥接至选择第一步 windows 无线网卡信息


1.3设置虚拟机网络适配器为桥接模式


1.4关闭 Windows 无线网络使用的防火墙


1.5 重启电脑


1.6测试效果



2  ubuntu开发环境相关设置


连接无线即可.


测试效果



3  使用效果总结


尽可能提高编译主机核数以增加Active jobs


各个编译机调度受网速影响





推荐阅读
  • [转]Makefile 使用总结
    2019独角兽企业重金招聘Python工程师标准1.Makefile简介Makefile是和make命令一起配合使用的.很多大型项目的编译都是通过Makefile来组织的,如 ... [详细]
  • 我正在尝试在Windows内核驱动程序中使用GetProcessImageFileNameW。LPWSTRpath[MAX_PATH]; ... [详细]
  • php黄色波浪线什么意思?
    导读:今天编程笔记来给各位分享关于php黄色波浪线什么意思的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: ... [详细]
  • 开发笔记:Java类的生命周期浅析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java-类的生命周期浅析相关的知识,希望对你有一定的参考价值。简述:Java虚拟机为Java程序 ... [详细]
  • 下面,我用最简洁的文字尽可能作最详尽的回答:两者之间存在的“五大不同”。与此同时,着重说明MicrosoftWindows64位(x64)操作系统,相对于32位(x86)操作系统的最大优势和劣势是什 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了高效算法求解数独相关的知识,希望对你有一定的参考价值。title:高效算法求解数独 ... [详细]
  • 启动activemq_「Java」SpringBoot amp; ActiveMQ
    一、消息队列消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构, ... [详细]
  • 计算机程序的思维逻辑 (第7节更新)再谈乱码恢复
    在第6节和第7节,我们讨论了文本的二进制编码、乱码、以及恢复,第6节受到了很多读者的一致好评,但第7节有读者反馈解说的不太透彻,希望再详细一点,本文就 ... [详细]
  • 开发该软件的操作系统_外甥问我什么是操作系统?
    我把自己以往的文章汇总成为了Github,欢迎各位大佬starhttps:github.comcrisxuanbestJavaer已提交此篇文章外甥上大一了ÿ ... [详细]
  • 安装ha软件一、安装软件最稳定的版本是5.4.0,优先安装稳定版本5.4安装依赖于包base.data,cluster的man包安装失败原因是缺少base.data包安装所有clus ... [详细]
  • 小记hbase数据库java API 常用方法及案例
    HBaseAdmin类:管理hbase数据库的表信息,‘创建表、删除表、列出表选项、使表有效/无效、添加或删除列簇’;  ... [详细]
  • RocketdecodeSimplifyDC
    https:mp.weixin.qq.coms4uWqBRrMVG6FlnBKmw8U-w介绍SimplifyDC如何简化解码逻辑。1.使用??简化从mint和maxt中查找的逻辑 ... [详细]
  • 二哥,我今年大二,看你分享的《阿里巴巴Java开发手册》上有一段内容说:“循环体内,拼接字符串最好使用StringBuild ... [详细]
  • IIS启用Gzip的方法与优缺点分析是千自学中一篇关于Discuz论坛的文章简介:现代的浏览器IE6和Firefox都支持客户端Gzip,也就是说,在服务器上的网页,传输之前,先使用Gzip压缩再传输给客户端,客户端接收之后由浏览器解压显示,这样虽然稍微占用了一些服务器和客户端的C ... [详细]
  • 一、背景这段时间刚好有时间,帮朋友做一个简单的系统管理网站,因为朋友买的空间是虚拟机,支持的PHP版本在5.5以下,所以只好挑一个老框架,为了快速便捷开发,我就选择了ThinkPH ... [详细]
author-avatar
fkg7571831
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有