學習計劃
- 了解編譯系統的歷史
- 了解各個歷史的工具
- make階段編譯程序
- Soong階段編譯程序
- ninja階段編譯程序
了解各個歷史的工具
配制檔案:
| 檔案名 | 作用 |
|---|---|
| Makefile | GNU Make開發的makefile |
| mk | android編譯系統特有的makefile |
| bp | android編譯系統特有的makefile |
| build.ninja | ninja特有的makefile |
- Makefile詳解
傳送門 - build.ninja詳解
Ninja的默認配制檔案,其它檔案也以.ninja為后綴, - Makefile與mk的區別:
Makefile就是傳統的gnu配制檔案 ; mk/bp就是android特有的配制檔案 - bp與mk的區別:
bp是純粹的配置,沒有分支/算數邏輯運算/回圈等流程控制,
控制邏輯需要Go撰寫實作,
構建系統:
-
為什么google在android 7.0的時候把GNU make替換成ninja?
因為ninja專注核心功能、輕巧、速度快、并行編譯、并行link可能還有其他, -
ninja與GUN make的對比:
| 構建系統 | android后綴 | 編譯時間 | clean是否需要撰寫 | android是否帶 |
|---|---|---|---|---|
| ninja | build.ninja/.ninja | 第一次與增刪檔案時慢,后續快 | 否 | 是 |
| make | Makefile/.mk/.bp | 反之 | 是 | 否 |
歷史工具:
Makefile是GUN make的配制檔案,build.ninja是ninja的配制檔案
但是我們并不有看到Makefile mk bp這些檔案直接替換成build.ninja
所以google還是做了一些特殊處理不同階段產生了一些工具

| 名稱 | 作用 |
|---|---|
| kati | Makefile or mk轉換成build.ninja |
| androidmk | mk轉成bp |
| Soong | 編譯生成安裝Blueprint |
| Blueprint | 生成并決議bp檔案 |
分享一組網上的對比資料:
- 多任務并行編譯測驗
| 構建系統 | Termux (8core/-j12) | 構建系統 | Termux (8core/-j12) |
|---|---|---|---|
| xmake | 24.890s | xmake | 12.264s |
| ninja | 25.682s | ninja | 11.327s |
| cmake(gen+make) | 5.416s+28.473s | cmake(gen+make) | 1.203s+14.030s |
| cmake(gen+ninja) | 4.458s+24.842s | cmake(gen+ninja) | 0.988s+11.644s |
- 單任務編譯測驗
| 構建系統 | Termux (-j1) | 構建系統 | MacOS (-j1) |
|---|---|---|---|
| xmake | 1m57.707s | xmake | 39.937s |
| ninja | 1m52.845s | ninja | 38.995s |
| cmake(gen+make) | 5.416s+2m10.539s | cmake(gen+make) | 1.203s+41.737s |
| cmake(gen+ninja) | 4.458s+1m54.868s | cmake(gen+ninja) | 0.988s+38.022s |
未完待續,敬請期待...
非常感謝您花費時間閱讀這份稿件,感覺有用可以分享給更多的學習者,轉載請標記出處,
作者: [Alin]
時間: 2021 年 02月 03日
email:380475066@qq.com
參考文獻
GNU-維基百科
GCC-維基百科
xmake
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/256687.html
標籤:其他
