跳到主要内容

使用 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 分开,后者是 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 -- 这在以前是一个问题