WebRTC編譯系統之gn和ninja

2021-10-05 11:37:38 字數 2379 閱讀 4879

webrtc現在使用 gn 來生成構建指令碼,使用 ninja 來構建。

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

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

gn 的介紹在這裡:這個頁面還有到 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
寫作本文時,支援:

比如下列命令,生成支援 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 支援的所有命令列選項,比如 --args,-v

gn help switches

// 你可是對上面命令列出的每個 switch 使用 help 指令,

// 比如 gn help --args,

// 可以顯示 --args 這個 switch 的詳細幫助資訊

gn help --args

// 顯示 gn gen 的幫助資訊,比如 ide 選項

gn gen --help

記得我在編譯 skia 時介紹過 ninja ,那篇文章在這裡:

ninja 的官網在這裡:

字尾為 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 檔案。

webrtc 和 rtp 協議 之sctp

webrtc和rtp 一 pion的datachannel示例 zoom公司大家其實都知道,會議的體驗很好,因為他們善用了datachannel,有興趣大家可以仔細研究,推敲,到了今天,技術和核心技術得不到大家的理解,很多人依然認為技術可以獲取,缺的是錢,事實上,兩個都缺。sctp協議可以適用tcp...

Linux之CentOS7安裝和解除安裝GNONE桌面

檢視當前的執行級別和可以安裝的group systemctl get default yum grouplist 如下圖 檢視安裝的包有哪些內容 yum group info graphical administration tools 安裝gnome桌面 yum y groups install ...

n2n的編譯和執行 配置

交叉編譯 cmake dcmake toolchain file cmake cmaketoolchainfilemingw32.cmake build 1.n2n 基於p2p的內網穿透方案。2.ubuntu linux下編譯 git clone apt get install cmake libs...