WebRTC編譯系統之gn和ninja

WebRTC現在使用 gn 來生成構建腳本,使用 ninja 來構建。

gn 比 GYP 快多了,太多,你還沒眨個眼,就結束了。

我們來大概介紹下編譯 WebRTC 會用到的 gn 和 ninja 相關的知識。 想看編譯指南的,看這裏:Ubuntu 14.04下編譯WebRTC

gn

gn 的介紹在這裏:https://www.chromium.org/developers/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 ,那篇文章在這裏:http://blog.csdn.net/foruok/article/details/50699101

ninja 的官網在這裏:https://ninja-build.org/

後綴爲 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 文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章