论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
物联网
›
物联网
›
Chromium 134 编译指南 macOS篇:编译优化技巧(六) ...
Chromium 134 编译指南 macOS篇:编译优化技巧(六)
鼠扑
论坛元老
|
前天 18:43
|
显示全部楼层
|
阅读模式
楼主
主题
2001
|
帖子
2001
|
积分
6003
1. 引言
在Chromium 134的开发过程中,优化编译速率是提升开发服从的关键因素。本文将重点介绍如何使用ccache工具来加速C/C++代码的编译过程,特别是在频繁切换分支和修改代码时。通过公道配置和使用这些工具,您将能够显著淘汰编译时间,提高开发服从。
作为一款强盛的编译器缓存工具,ccache能够智能辨认并复用之前的编译结果。它的核心上风在于能够显著淘汰重复编译的时间,这一特性在频繁进行分支切换的开发场景中尤为重要。本文将为您详细解说如何通过Homebrew包管理器安装ccache,并提供在Chromium项目中配置和优化ccache的完整指南。掌握这些实用技巧,将让您的开发服从得到显著提升,有效收缩项目标构建周期。
2. 编译加速工具介绍
2.1 认识CCache
ccache是一个强盛的编译器缓存工具,其重要功能包罗:
缓存之前的编译结果
自动检测重复编译情况
显著淘汰重复编译时间
支持跨分支编译缓存
在大型项目如Chromium的开发中,开发者经常需要在不同分支间切换,大概反复修改特定文件。这些操纵都会触发重新编译,而ccache通过智能缓存策略,可以大幅淘汰这些重复编译的时间消耗。
2.2 安装Homebrew包管理器
在安装ccache之前,我们首先需要配置Homebrew:
访问Homebrew官网:Homebrew — The Missing Package Manager for macOS (or Linux)
复制官网首页提供的安装命令,并在终端中执行
等候安装完成,过程中大概需要访问外网
当终端显示"Installation successful!"时,体现Homebrew安装成功
根据Homebrew安装完成后的提示,将Homebrew的路径参加到您的环境变量中。通常需要执行类似于以下的命令(具体命令请根据您的终端输出进行调整):
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
复制代码
运行brew help命令,确认Homebrew已经精确安装
2.3 配置CCache
2.3.1 安装ccache
使用Homebrew安装ccache:
brew install ccache
复制代码
安装完成后,您可以通过以下命令查抄ccache的版本:
ccache --version
复制代码
2.3.2 配置环境变量
编辑您的Shell配置文件(~/.bashrc、~/.zshrc或~/.zprofile,具体取决于您使用的Shell),添加以下配置:
# CCache配置
export PATH="/opt/homebrew/opt/ccache/libexec:$PATH"
export CCACHE_DIR="$HOME/.ccache"
export CCACHE_MAXSIZE="100G"
复制代码
PATH环境变量的修改是为了确保体系优先使用ccache提供的编译器
CCACHE_DIR指定了ccache缓存文件的存放位置
CCACHE_MAXSIZE设置了ccache缓存的最大容量,这里设置为100GB,您可以根据本身的磁盘空间进行调整
生存配置文件后,运行以下命令使新配置收效:
source ~/.zshrc # 如果您使用的是zsh
# 或
source ~/.bashrc # 如果您使用的是bash
复制代码
2.3.3 创建缓存目次
如果CCACHE_DIR指定的目次不存在,您需要手动创建它:
mkdir -p ~/.ccache
复制代码
此目次将用于存储全部的编译缓存文件。
3. 在Chromium中启用CCache
3.1 修改编译配置
编辑Chromium源码目次下的args.gn文件(例如~/chromium134/src/out/Default/args.gn),添加以下配置:
cc_wrapper = "env CCACHE_SLOPPINESS=time_macros ccache"
复制代码
如果您之前已经运行过gn gen命令生成了构建文件,可以通过以下命令打开交互式编辑界面:
gn args out/Default
复制代码
添加上述配置后生存并退出编辑器。
3.2 配置说明
cc_wrapper: 指定编译包装器,这里设置为ccache
CCACHE_SLOPPINESS=time_macros: 这是一个环境变量,用于控制ccache缓存的匹配严格程度。time_macros体现忽略时间相关的宏,提高缓存命中率
在Chromium编译中,很多源文件包罗时间戳宏(如__DATE__和__TIME__),这些宏会随着编译时间的不同而变化,导致即使源代码完全雷同,编译结果也大概不同。通过设置CCACHE_SLOPPINESS=time_macros,可以让ccache忽略这些时间相关的差异,提高缓存的命中率。
3.3 验证配置
使用以下命令查察ccache的状态:
ccache -s
复制代码
如果看到类似"cache directory /Users/yourusername/.ccache"和一些统计信息,则体现ccache已成功启用。
执行一次增量编译,然后再次查察ccache的状态,您应该能看到缓存命中次数有所增加:
autoninja -C out/Default chrome
ccache -s
复制代码
4. 高级优化技巧
4.1 定期维护缓存
4.1.1 清理缓存
如果您的缓存已经很大,大概希望重新开始建立新的缓存,可以使用以下命令清理ccache的缓存:
ccache -C
复制代码
这将清空全部缓存文件,但保留配置。
4.1.2 调整缓存巨细
您可以随时调整ccache的最大缓存巨细:
ccache -M 100G # 设置为100GB
复制代码
建议根据您的磁盘容量和项目规模来设置合适的缓存巨细。对于Chromium这种大型项目,建议至少分配50GB空间给ccache。
4.2 监控缓存性能
定期监控ccache的性能对于优化构建过程非常重要:
ccache -s
复制代码
输出将显示以下关键信息:
缓存命中率:显示多少次编译哀求从缓存中得到了满足
缓存巨细:当前缓存使用的磁盘空间
缓存生存的文件数目
调用统计:ccache被调用的总次数
4.3 其他编译优化方法
除了使用ccache外,还有一些其他方法可以加速Chromium的编译:
4.3.1 调整并行任务数
根据您的CPU核心数和内存巨细,适当调整并行编译任务的数目:
autoninja -C out/Default -j8 chrome # 指定8个并行任务
复制代码
4.3.2 使用组件构建模式
在args.gn中启用组件构建模式可以加快增量编译速率(但会影响终极应用的性能):
is_component_build = true
复制代码
4.3.3 优化构建配置
对于不需要的功能,可以在args.gn中禁用:
# 禁用不需要的功能
use_cups = false
use_pulseaudio = false
use_sndio = false
复制代码
5. 结语
通过本文的介绍,您已经掌握了如何使用ccache来优化Chromium 134的编译过程。这些优化技巧不但能显著淘汰编译时间,还能提高开发服从。在实际开发中,公道使用这些工具将资助您更专注于代码开发和调试工作。
在大型项目开发中,编译优化是一个持续改进的过程。通过不绝调整和监控ccache的配置,您可以在本身的开发环境中找到最佳的设置。记得定期清理不必要的缓存,并根据项目变化调整缓存巨细,以保持体系的高效运行。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
鼠扑
论坛元老
这个人很懒什么都没写!
楼主热帖
Java 基于Apache POI实现Excel读写操作 ...
Dapr 知多少 | 分布式应用运行时 ...
XAF新手入门 - 类型子系统(Types Info ...
springboot开启单元测试的方法分享 ...
5.15日 搭建青龙面板教程——狗东跑跑 ...
记录一次NoSuchMethodError问题的解决 ...
C#生成putty格式的ppk文件(支持passph ...
Python 封装SNMP调用接口
SQLSERVER大小写转换方法
风险洞察之事件总线的探索与演进 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
SQL-Server
网络安全
CRM
快速回复
返回顶部
返回列表