webrtc gn开发环境 quick-start

前面我们讲了搭建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.

猜你喜欢

转载自blog.csdn.net/zhangkai19890929/article/details/81909780