跳到主要内容

使用 GN 构建 Electron

·2 分钟阅读

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。

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

为了解决这个问题,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,这在之前是 有问题的