前面我们讲了搭建gn开发环境和用gn环境编译第一个hello world程序.
今天我们需要系统的介绍
最好的教材永远是官方的第一手资料,英语太重要了,有木有!
目录结构:
https://gn.googlesource.com/gn/+/master/docs/
还有一份PPT介绍的也是相当的不错的:
https://docs.google.com/presentation/d/15Zwb53JcncHfEwHpnG_PoIbbzQ3GQi_cpujYwbpcbZo/edit#slide=id.g119d702868_0_12
今天我们先从quick start 开始:
https://gn.googlesource.com/gn/+/master/docs/quick_start.md
首先看下我的工程的目录结构,这样的接口太清晰了,各个模块完全独立,并且在编译的时候可以指定编译那个模块.
代码下载:
链接: https://pan.baidu.com/s/12NOo43PKOhfXUtjUCUgzWA 密码: 6vsv
在这里我一共有2个工程:
一个是helloworld ,另一个工程是:makestaticlibrary,大家注意我这里是2个独立的工程哦,每个工程都有BUIBLD.gn,告诉我们如何去编译这个工程.
那么肯定有一个总的配置表,告诉我们有哪些工程,对的,这个总的配置表就是src目录下的BUILD.gn,src是我们的root目录,src/BUILD.gn会告诉我们需要编译哪些工程.
group("root") {
deps = [
"//helloworld:hello_world",
"//makestaticlibrary:say_hello"
]
}
//helloworld:hello_world
//代表工程的根目录也就是src目录
//helloworld:hello_world 代表helloworld目录下的BUILD.gn里面的helloworld target,注意这里的意思:也就是在helloworld其实我也可以指定编译多个target,但是我指定了只编译hello_world target
helloworld/BUILD.gn 的内容如下:
executable("hello_world") {
sources = [
"main.cpp"
]
}
makestaticlibrary/BUILD.gn的内容如下:
static_library("hello"){
sources = [
"hello.cc"
]
}
executable("say_hello") {
sources = [
"say_hello.cc"
]
deps = [
":hello"
]
}
大家注意到没 deps 下的有2种写法:
deps = [
"//helloworld:hello_world",
"//makestaticlibrary:say_hello"
]
executable("say_hello") {
sources = [
"say_hello.cc"
]
deps = [
":hello"
]
}
//helloworld:hello_world这种写法我们前面介绍过,是到helloworld/BUILD.gn 文件中找hello_world target
:hello 代表的意思则是在当前的BUILD.gn文件中寻找hello target,我们这里的hello刚好是一个static library.
我们可以手动指定编译那些target:
ninja -C out/debug say_hello — 只编译say_hello target.
ninja -C out/debug hello_world — 只编译hello_world target.