当前位置: 首页 > 工具软件 > Ninja-IDE > 使用案例 >

WebRTC编译系统之gn和ninja

有宏峻
2023-12-01

WebRTC现在使用 gn 来生成构建脚本,使用 ninja 来构建。

gn 比 GYP 快多了,太多,你还没眨个眼,就结束了。

我们来大概介绍下编译 WebRTC 会用到的 gn 和 ninja 相关的知识。 想看编译指南的,看这里:Ubuntu 14.04下编译WebRTC

gn

gn 的介绍在这里:GN build configuration。这个页面还有到 gn 各种 reference 的链接。

使用 gn 生成 ninja 构建文件的常用命令:

// 生成 debug 版本的构建文件,默认配置
gn gen out/Debug 

// 生成 release 版本的构建文件
gn gen out/Release --args="is_debug=false"

注意,通过 --args 可以传递参数给 gn ,具体参数的含义,由 WebRTC 的构建系统来解释。比如 is_debug 选项,决定构建 debug 还是 release 版本。

如果有多个参数,可以这样传递:

gn gen out/Release --args="is_debug=false proprietary_codecs=true"

通过--args指定多个参数时,参数之间用空格分隔。生成的参数,存放在 out/Release 下的 args.gn 文件中。你可以直接打开该文件查看。

通过--args 指定的参数,会覆盖 WebRTC 构建系统中同名参数。

gn 支持为 WebRTC 生成针对某个 IDE 的工程文件,通过 --ide 来指定。具体支持哪些 IDE ,可以使用下列命令查看:

gn gen --help

写作本文时,支持:

  • eclipse, Eclipse CDT settings file
  • vs, Visual Studio project/solution files.(default to VS 2015)
  • vs2013
  • vs2015
  • xcode
  • qtcreator, QtCreator project files.
  • json

比如下列命令,生成支持 QtCreator 的项目文件:

gn gen out/Release --args="is_debug=false" --ide="qtcreator"

我喜欢 Qt ,所以以它为例了。再多说一句,生成的 QtCreator 项目文件在 out/Release/qtcreator_project 下面,只要打开 QtCreator ,加载 all.creator 文件即可。

如果你已经使用 gn gen 生成过构建文件,想看看这个版本的构建文件都指定了什么参数,可以使用下面命令:

gn args out/Release --list

它会列出所有的 build arguments 和对应的文档,以及当前值。

如果你想查看某个参数,可以使用下面的命令:

gn args out/Release --list="is_debug"

好啦, gn 就介绍到这里,如果想了解更多,可以看下面的链接:

或者,执行下面的某个命令:

// 显示 gn 支持的所有命令行选项,比如 --args,-v
gn help switches

// 你可是对上面命令列出的每个 switch 使用 help 指令,
// 比如 gn help --args,
// 可以显示 --args 这个 switch 的详细帮助信息
gn help --args

// 显示 gn gen 的帮助信息,比如 IDE 选项
gn gen --help

ninja

记得我在编译 Skia 时介绍过 ninja ,那篇文章在这里:Skia构建系统与编译脚本分析_foruok的博客-CSDN博客

ninja 的官网在这里:Ninja, a small build system with a focus on speed

后缀为 ninja(*.ninja) 的文件是 ninja 的 构建文件。对 WebRTC 来讲,执行完 gn gen 之后,会在 out/Release 下生成 build.ninja 文件,可以把这个文件看做是整个 WebRTC 的“ Makefile ”。它里面调用了各个模块的 ninja 文件。

要完整编译 WebRTC ,只要在 src 目录执行下列命令:

ninja -C out/Release

-C 选项告诉 ninja ,进入 out/Release 目录来编译。所以,它等同于:

cd out/Release
ninja

要编译某个模块,可以在 ninja 命令后跟模块名字(build.ninja文件中定义的构建目标,就像 Makefile 中的构建目标一样)。比如:

// 构建 webrtc/pc
ninja pc 

// 构建 webrtc/media
ninja media

使用下列命令可以查看帮助:

ninja --help

ninja 支持子工具,比如 clean ,用来清理一次构建。用法如下:

ninja -t clean

如果要清理某个模块,可以这样:

ninja -t clean pc

更多子工具,可以这样看到:

ninja -t list

就先这样吧,下次写写 gn 的项目文件,再下次写写 ninja 文件。

参考文章:

Android中的Ninja简介 · 零壹軒·笔记

Gn 与 Ninja学习和使用_fangye945a的博客-CSDN博客_gn和ninja

 类似资料: