跳至主要内容

使用 GN 构建 Electron

·阅读时间:2 分钟

Electron 现在使用 GN 来构建自身。以下是关于原因的讨论。


GYP 和 GN

Electron 于 2013 年首次发布时,Chromium 的构建配置是用 GYP 编写的,GYP 是“生成您的项目”的缩写。

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

Electron 从历史上一直保持着主要 Electron 代码libchromiumcontent(Electron 中包装 Chromium 的“内容”子模块的部分)之间的分离。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——这在 之前 是有问题的。