使用gn创建HelloWorld工程
1. 研究chromium自带的HelloWorld工程
我们在src根目录下找到【test】目录,此目录下存在2个文件
BUILD.gn
hello_world.cc
查看文件内容
// BUILD.gn 内容如下
executable("hello_world") {
sources = [
"test.cpp", // 这里有点不对,应该是下面的hello_world.cc,因为test.cpp根本不存在
]
}
// hello_world.cc 内容如下
#include <iostream>
int main()
{
std::cout << "hello world" << std::endl;
return 0;
}
分析内容
- 【BUILD.gn】是编译脚本
- executable是指生成exe的名字
- source是指源码文件列表,相对目录
- 【hello_world.cc】是源码文件
2. 动手写一个自己的HelloChromium
我们在src根目录下创建【hello_chromium】目录,并将test目录下的2个文件拷贝过来,并修改为如下名称
BUILD.gn
hello_chromium.cc
修改文件内容
// BUILD.gn 内容如下
// 特别提醒json的格式化必须使用空格不能使用tab,要不然执行脚本就会报错,WTF!!!!
executable("hello_chromium") {
sources = [
"hello_chromium.cc",
]
}
// hello_chromium.cc 内容如下
#include <iostream>
int main()
{
std::cout << "hello chromium." << std::endl;
return 0;
}
修改src根目录下BUILD.gn
// 找到如下内容,在deps的数组中增加我们自己的hello_chromium工程
// 规则是工程根目录:executable名称,如下所示
group("gn_all") {
testonly = true
deps =[
":gn_visibility",
"//base:base_perftests",
"//base:base_unittests",
"//chrome/installer",
"//chrome/updater",
"//net:net_unittests",
"//skia:skia_unittests",
"//sql:sql_unittests",
"//tools/binary_size:binary_size_trybot_py",
"//tools/ipc_fuzzer:ipc_fuzzer_all",
"//ui/base:ui_base_unittests",
"//url:url_unittests",
"//tools/gn/tutorial:hello_world",
"//tools/gn/tutorial:say_hello",
"//hello_chromium:hello_chromium", // 第一个hello_chromium是目录名称,第二个hello_chromium是exe名称
]
在src目录下执行ninja
E:\Source\chromium\src (HEAD detached at 26ff314 -> origin)
λ ninja.exe -C out\Default hello_chromium
ninja: Entering directory `out\Default'
[1/1] Regenerating ninja files
[2/2] LINK hello_chromium.exe hello_chromium.exe.pdb
E:\Source\chromium\src (HEAD detached at 26ff314 -> origin)
λ .\out\Default\hello_chromium.exe
hello chromium.
E:\Source\chromium\src (HEAD detached at 26ff314 -> origin)