
1. 前言
在上一篇文章中,我们介绍了 Chromium 构建系统中的 GN 的基本概念、目录结构和常用工具。从本篇开始,我们将进入实战环节,通过构建一个简单的 Demo 来学习如何编写和使用 GN 目标,让你亲身体验 GN 的魅力。
2. 动手实践:构建一个简单的 Demo
为了更好地理解 GN 目标的使用方法,我们将创建一个简单的 Demo,该 Demo 包含一个静态库和一个可执行文件,演示如何使用 executable 目标来构建一个可执行文件的项目。
🎉
注意:这里我们默认您已经根据编译指南成功编译过了Chromium,如有疑问请查询过往的编译指南。
2.1 组织项目结构
首先,我们需要在 Chromium 源码的 src 目录下创建一个名为 demo 的文件夹来存放我们的项目文件。
- 创建
demo文件夹: 在资源管理器中,打开 Chromium 源码的src目录,右键单击空白处,选择“新建”->“文件夹”,并将其命名为demo。 - 创建
BUILD.gn文件: 进入demo文件夹,右键单击空白处,选择“新建”->“文本文档”,将其命名为BUILD.gn。 请确保文件扩展名为.gn而不是.txt。 你可能需要启用“显示文件扩展名”选项才能正确修改。 - 编辑
BUILD.gn文件: 使用你喜欢的文本编辑器(例如记事本、Notepad++、VS Code 等)打开BUILD.gn文件,并添加以下内容:
group("demo") {deps = ["hello_gn",]
}
代码解释:
group("demo"): 定义了一个名为demo的group目标。group目标本身不产生任何输出,它主要用于组织和管理其他的目标。deps = [ "hello_gn" ]: 指定demo目标的依赖项为名为hello_gn的目标。这意味着在构建demo目标之前,需要先构建hello_gn目标。这里hello_gn将会是一个可执行文件目标,我们将在下一步创建。
- 创建
hello_gn文件夹: 在demo文件夹下,右键单击空白处,选择“新建”->“文件夹”,并将其命名为hello_gn。 - 创建
hello_gn.cc文件: 进入hello_gn文件夹,右键单击空白处,选择“新建”->“文本文档”,将其命名为hello_gn.cc。同样请确保文件扩展名为.cc。 - 编写
hello_gn.cc代码: 使用文本编辑器打开hello_gn.cc文件,并添加以下 C++ 代码:
#include <iostream>int main() {std::cout << "Hello GN!" << std::endl;return 0;
}
代码解释:
- 这段代码非常简单,它包含了
<iostream>头文件以使用标准输入输出流,并在main函数中打印 "Hello GN!" 到控制台。
- 创建
hello_gn/BUILD.gn文件: 在hello_gn文件夹下,右键单击空白处,选择“新建”->“文本文档”,将其命名为BUILD.gn。确保文件扩展名为.gn。 - 编写
hello_gn/BUILD.gn代码: 使用文本编辑器打开hello_gn/BUILD.gn文件,并添加以下内容:
executable("hello_gn") {sources = ["hello_gn.cc",]
}
代码解释:
executable("hello_gn"): 定义了一个名为hello_gn的executable目标,表示要构建一个可执行文件。sources = [ "hello_gn.cc" ]: 指定了构建该可执行文件所需的源文件列表。
最终,demo文件夹下应该如下面的结构

2.2 配置构建参数
接下来,我们需要修改之前编译生成的 out/Default 文件夹下的 args.gn 文件,以添加我们的 Demo 到构建系统中。
- 修改
args.gn文件: 使用文本编辑器打开out/Default/args.gn文件(如果没有Default目录,请根据你的实际构建目录进行调整)。在文件末尾添加以下两行:
# Add extra dependencies to the GN root
root_extra_deps = [ "//demo" ]# Disable treating warnings as errors
treat_warnings_as_errors = false
- 代码解释:
root_extra_deps = [ "//demo" ]: 将//demo目标添加到根构建目标的依赖中。//demo表示src/demo/BUILD.gn中定义的demo目标。这样,在执行gn gen时,GN 会将我们的 Demo 包含到构建图中。treat_warnings_as_errors = false: 将此选项设置为false可以避免一些潜在的编译警告被当作错误处理,使得编译更容易通过(在开发阶段较为实用,发布版本建议开启)。
2.3 生成构建文件并编译
现在,我们可以生成 Ninja 构建文件并执行编译了。
- 生成 Ninja 构建文件: 打开命令行工具 (例如 cmd 或 PowerShell),并切换到 Chromium 源码的
src目录 ,执行gn gen命令。请将xxxx替换为你想要的构建输出目录,例如out/Default或out/Debug。
gn gen out/Default
- 或者(如果您之前已经生成过
out/Default):
gn gen <xxxx>
这条命令会根据 BUILD.gn 文件生成相应的 Ninja 构建文件。

- 编译: 使用
ninja命令进行编译:
ninja -C out/Default demo

2.4 运行 Demo
编译成功后,你会在 out/Default 目录下找到生成的可执行文件 hello_gn.exe。
- 运行可执行文件: 在命令行中输入以下命令:
out\Default\hello_gn.exe

- 或者,你也可以直接在资源管理器中双击
hello_gn.exe文件来运行。
如果一切顺利,你将在控制台中看到输出:
Hello GN!
恭喜你! 你已经成功构建并运行了你的第一个 GN Demo!
3. 结语
在本篇中,我们通过一个简单的 Demo 演示了如何使用 executable 目标来构建可执行文件。你学习了如何组织项目结构、编写 BUILD.gn 文件、配置构建参数以及执行编译和运行。
