热门标签 | 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


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





推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍了如何通过配置 Android Studio 和 Gradle 来显著提高构建性能,涵盖内存分配优化、并行构建和性能分析等实用技巧。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文介绍如何在Linux Mint系统上搭建Rust开发环境,包括安装IntelliJ IDEA、Rust工具链及必要的插件。通过详细步骤,帮助开发者快速上手。 ... [详细]
  • 如何在PHPCMS V9中实现多站点功能并配置独立域名与动态URL
    本文介绍如何在PHPCMS V9中创建和管理多个站点,包括配置独立域名、设置动态URL,并确保各子站能够正常运行。我们将详细讲解从新建站点到最终配置路由的每一步骤。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • npm run dev后报错 ... [详细]
  • 解决SVN图标显示异常问题的综合指南
    本文详细探讨了SVN图标无法正常显示的问题,并提供了多种有效的解决方案,涵盖不同环境下的具体操作步骤。通过本文,您将了解如何排查和修复这些常见的SVN图标显示故障。 ... [详细]
  • MySQL PMM:MyISAM 和 Aria 存储引擎的性能优化
    本文探讨了 MyISAM 和 Aria 存储引擎在 MySQL 中的关键性能指标,包括密钥缓冲区效率、页面缓存读写性能以及事务日志同步策略。通过优化这些参数,可以显著提升数据库的整体性能。 ... [详细]
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社区 版权所有