跳到主要内容

使用 GN 构建 Electron

·2 分钟阅读

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


GYP 和 GN

当 Electron 于 2013 年首次发布时,Chromium 的构建配置是用 GYP 编写的,GYP 是 "Generate Your Projects" 的缩写。

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

Electron 历史上一直保持着主 Electron 代码libchromiumcontent 之间的分离,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 -- 这是以前 有问题的