跳转到主要内容

使用 GN 构建 Electron

·3 分钟阅读

Electron 现在使用 GN 进行构建。这里讨论了原因。


GYP 和 GN

Electron 最初发布于 2013 年,当时 Chromium 的构建配置是用 GYP 编写的,它是“Generate Your Projects”的缩写。

2014 年,Chromium 项目引入了一个名为 GN(“Generate Ninja”的缩写)的新构建配置工具。Chromium 的构建文件迁移到了 GN,并且 GYP 已从源代码中移除。

Electron 历史上一直将主要的 Electron 代码libchromiumcontent(Electron 中包装 Chromium 'content' 子模块的部分)分开。Electron 一直沿用 GYP,而 libchromiumcontent -- 作为 Chromium 的一个子集 -- 在 Chromium 切换到 GN 时也切换到了 GN。

就像两个不完全咬合的齿轮一样,使用这两种构建系统之间存在摩擦。维护兼容性容易出错,需要细致地在 Chromium、Node、V8 和 Electron 之间同步编译器标志和 #defines

为了解决这个问题,Electron 团队一直在努力将所有内容迁移到 GN。今天,从 Electron 中移除最后一个 GYP 代码的 提交 已合并到 master 分支。

这对您意味着什么

如果您为 Electron 本身做贡献,那么从 master 或 4.0.0 版本开始签出和构建 Electron 的过程与 3.0.0 及更早版本有很大不同。请参阅 GN 构建说明以获取详细信息。

如果您正在开发使用 Electron 的应用程序,那么在新版 Electron 4.0.0-nightly 中可能会注意到一些小的更改;但更有可能的是,Electron 构建系统的更改对您来说将是完全透明的。

这对 Electron 意味着什么

GN 比 GYP 更快,而且它的文件更易读、易维护。此外,我们希望使用单一的构建配置系统能够减少将 Electron 升级到新版本 Chromium 所需的工作量。

  • 它已经极大地促进了 Electron 4.0.0 的开发,因为 Chromium 67 移除了对 MSVC 的支持,并在 Windows 上切换到使用 Clang 进行构建。通过 GN 构建,我们直接继承了 Chromium 的所有编译器命令,因此我们免费获得了 Windows 上的 Clang 构建!

  • 它也使得 Electron 更容易在 Electron、Chromium 和 Node 中统一使用 BoringSSL 进行构建 -- 这在以前是 存在问题的。