跳转到主要内容

使用 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 时也切换了。

就像齿轮不能完全啮合一样,使用这两种构建系统会产生摩擦。从需要在 Chromium、Node、V8 和 Electron 之间仔细保持同步的编译器标志和 #defines,维护兼容性容易出错。

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

这对您意味着什么

如果您正在为 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 变得更容易,而这在之前是 一个问题