Chromium 145 编译指南 Windows篇:生成构建文件(六)

张开发
2026/4/9 2:00:05 15 分钟阅读

分享文章

Chromium 145 编译指南 Windows篇:生成构建文件(六)
引言经过上一篇漫长的拉取与等待你现在已经成功将 Chromium 145 庞大而完整的源代码存入了本地硬盘例如D:\chromium_src\src。现在摆在你面前的是数千万行代码和错综复杂的项目结构。但这些代码目前就像是一份极为精密的摩天大楼设计图——你可以阅读它但要让它真正“活”起来并转化为可执行的浏览器还需要经过一个关键的翻译转换过程。这就是GN工具的使命。在拥有了完整的代码、配置好的 Visual Studio 2022 工具链以及depot_tools之后我们还需要决定“我们要编译一个什么样的浏览器”。是用于底层调试的 Debug 版还是运行极快的 Release 版是 x64 架构还是 ARM64 架构本篇将指导你使用 GNGenerate Ninja元构建系统为 Chromium 145 生成精准的构建蓝图。这一步看似只需敲击几行代码但它直接决定了接下来长达数小时编译过程的成败、速度以及最终产物的性能表现。1 理解 GN 和 Ninja 的关系1.1 GN 是什么GNGenerate Ninja既不是编译器如cl.exe也不是底层的构建执行工具。它是一个元构建系统 (Meta-build system)——专门用来生成其他构建系统所需配置文件的工具。在 Chromium 的庞大生态中开发者你负责编写和修改人类可读的args.gn配置文件表达你的构建意图。GN 工具读取你的配置和源码中的.gn规则文件将其翻译为底层构建系统能理解的、极其庞大且详尽的有向无环图指令。Ninja 工具最终接手这些指令以极致的并行化效率调用编译器完成真正的编译动作。GN 的核心优势极速生成比 Chromium 早期的 GYP 系统快 20 倍以上。语法清晰配置参数以简单的键值对形式存在易于人类读写。跨平台同源同一套 GN 逻辑可以在 Windows、Linux、macOS 上完美生成符合各自系统特性的构建文件。1.2 GN 与 Ninja 的明确分工为了避免在后续编译中报错时无从下手理清这两个工具的分工至关重要GN 负责“构建什么”和“如何配置”宏观架构阶段。例如启用哪些功能特性、寻找 Windows SDK 路径、设定优化级别。Ninja 负责“实际怎么编译”和“以什么顺序编译”微观执行阶段。例如并行启动多少个编译线程、先编译哪个.cc文件、如何链接.dll。2 配置和生成构建文件2.1 打开终端并切换到源代码目录⚠️绝对关键的前提必须在src根目录下执行所有构建配置命令。打开你习惯的终端Command Prompt 或 PowerShell确保之前的环境变量已经生效执行cd D:\chromium_src\src请检查你的命令行提示符是否明确显示当前路径为...\src。2.2 初始化 GN 构建配置执行以下命令来初始化你的第一个构建输出目录gn args out\Default这个命令会触发以下动作在src目录下创建out\Default文件夹如果这是你第一次运行。自动调用系统默认的文本编辑器通常是记事本 Notepad打开一个名为args.gn的空白文件让你输入构建参数。2.3 核心构建配置参数解析编辑器打开后你需要输入适合当前开发环境的键值对参数。对于 Windows 下的 Chromium 145 开发者强烈推荐复制并粘贴以下参数集合# 目标 CPU 架构 target_cpu x64 # 禁用 Debug 模式Release 编译更慢但产物体积小、浏览器运行极快 is_debug false # 启用组件构建使用大量 DLL 而非单一静态链接极大加快二次编译和链接速度 is_component_build true # 符号信息级别0 最小1 包含行号2 最详细。Windows 上设为 2 会导致链接期内存爆炸推荐设为 0 或 1 symbol_level 0 # 开启 DCHECK 以捕捉潜在的逻辑错误非开发调试期可设为 false dcheck_always_on true # 禁用 Google 内部的远程编译缓存系统外部开发者必须禁用否则会因鉴权失败报错 use_remoteexec false参数进阶说明is_component_build如果你是开发者经常修改少量代码设为true可以避免每次都重新链接那个重达几百 MB 的chrome.dll节省大量时间。symbol_level如果你不是为了使用 WinDbg 深入调试 C 源码请务必设为0。在 Windows 上设为2时链接器 (link.exe) 经常需要消耗超过 32GB 的内存来处理 PDB 调试符号极易导致内存耗尽OOM而编译失败。2.4 保存并生成编辑完成后在记事本中按CtrlS保存文件。关闭记事本窗口。编辑器一旦关闭GN 会立即接管并自动开始生成 Ninja 构建文件。你的终端会输出类似如下的信息Waiting for editor on D:\chromium_src\src\out\Default\args.gn... Generating files... Done. Made 18452 targets from 3125 files in 4251ms⏱️时间估算GN 生成过程非常快通常需要 5 秒到 30 秒具体取决于你的 CPU 单核性能和 SSD 读写速度。2.5 修改配置后的重新生成如果在未来的开发中你需要修改上述配置例如想把symbol_level改为1有两种方法方法 1重新编辑并自动生成推荐gn args out\Default方法 2直接使用已有配置重新生成不弹窗当你通过脚本修改了args.gn文件后可以直接运行gn gen out\Default3 验证构建文件生成3.1 检查输出目录结构成功生成后你可以检查out\Default目录以确认生成结果dir out\Default\*.ninja你应该能看到build.ninja文件以及obj等子目录。这些就是接下来 Ninja 引擎要读取的“施工图纸”。3.2 验证配置参数是否生效为了确保没有拼写错误并且你的参数已被 GN 正确解析可以运行以下命令查看当前输出目录生效的全部配置gn args out\Default --list这会输出一个极长的列表其中包含了你手动设置的参数以及系统自动推导的默认参数。你可以结合findstr来精准查找例如gn args out\Default --list | findstr symbol_level。4 常见问题与解决方案Q执行gn args时提示“找不到工具链”或出现 Visual Studio 相关的红字 ERRORA这 100% 是环境变量没有生效。请回头检查DEPOT_TOOLS_WIN_TOOLCHAIN是否严格设为0以及vs2022_install的路径是否绝对正确并确保你已经彻底重启了终端窗口。Q出现 Python 相关的警告信息Adepot_tools依赖其内部隔离的 Python 3 版本。如果 Windows 系统的 Python 环境变量或 Windows 11 的执行别名干扰了它请参考第四篇的说明关闭“应用执行别名”。Q能否为同一份源代码创建多个完全不同的构建配置A当然可以GN 的设计非常优雅。你可以创建不同的输出目录互不干扰gn args out\Release_x64 # 配置 is_debug false, target_cpu x64 gn args out\Debug_ARM64 # 配置 is_debug true, target_cpu arm64在最终编译时只需将 Ninja 指向不同的目录即可。Q提示gn 不是内部或外部命令A说明depot_tools的路径没有被放在系统PATH环境变量的最顶端或者终端未重启。结语你已经漂亮地完成了从获取源代码到生成底层构建图纸的关键转换。GN 现在已经彻底理解了你的构建意图并将 Chromium 错综复杂的模块依赖关系梳理成了 Ninja 能够高效吞吐的执行指令。这一步虽然只需几分钟但你在这里做出的每一个决策——是否开启 Debug、配置多少级别的符号表、使用何种链接模式——都将决定着下一环节的成败。此刻你手中握着的是一份完美适配你当前 Windows 硬件环境的“浏览器施工蓝图”。真正的硬仗即将到来。下一篇《Chromium 145 编译指南 Windows篇编译与运行七》将带你正式激活 Ninja 编译引擎。你将看到 CPU 占用率瞬间飙升至 100%数万个 C 源文件在你眼前被逐一编译为二进制码。当这一切结束时一个由你自己亲手构建的 Chromium 浏览器将跃然屏上。准备好迎接最激动人心的时刻吧

更多文章