使用gn创建HelloWorld工程

使用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 
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 
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)

你可能感兴趣的:(chromium)