簡介
Bazel是Google開源的編譯建構工具,以Monolithic Repository為理念。
與makefile & CMake不同,Bazel另起爐竈,采用client/server運作模式,為雲編譯而生。
Bazel工具将編譯過程分三個階段:Load Phase/Analysis Phase/Execution phase。
研發人員實作workspace/build/.bzl三種檔案,Bazel執行這些檔案生成action graph,執行action來建構項目。
Bazel優點:
- 多語言支援
- client/server模式,雲編譯
- 非常友善的處理依賴:使用者可聲明依賴的位址、版本、建構規則,Bazel自動下載下傳對應版本的依賴,并根據規則建構對應依賴的target。
- 優秀的緩存:增量編譯非常快速
缺點:
- 開源社群資源匮乏(目前搜尋bazel編譯c++相關問題,大多跟tensorflow相關)
- 工具龐大,使用者上手難度高
- 工具靈活性較低,對使用者限制較多。比如:
- target使用的所有頭檔案都需要顯式地聲明(盡管支援glob)
- gen_rule(調用自定義功能:shell等)所有輸入和輸出檔案都需要顯式聲明
- 對其他子產品的依賴,隻能以其整個庫為形式,不能直接将其源碼作為本子產品target的源碼使用
- 對IDE很不友好,其下載下傳的依賴子產品以及編譯的中間産出,會存放到./bazel-module/和~/.cache,而且目錄層次很深
- 依賴git倉庫時,其git資訊會被bazel删除。使用者難以實作儲存依賴的git資訊
更多介紹請參考:大型C++工程的建構技術:Modern CMake vs Bazel
安裝
我使用的二進制安裝包,安裝過程很簡單。
下載下傳包:bazel-4.0.0-installer-linux-x86_64.sh。
執行以下流程(已經安裝有依賴的可省略):
sudo apt install g++ unzip zip
# Ubuntu 16.04 (LTS) uses OpenJDK 8 by default:
#sudo apt-get install openjdk-8-jdk
# Ubuntu 18.04 (LTS) uses OpenJDK 11 by default:
sudo apt-get install openjdk-11-jdk
chmod +x bazel-<version>-installer-linux-x86_64.sh
sudo ./bazel-<version>-installer-linux-x86_64.sh
ok,安裝完畢,如下圖:
當然還有很多安裝方式,參考官網:https://docs.bazel.build/versions/master/install-ubuntu.html
國内下載下傳源
安裝簡單,下載下傳難啊。
嘗試在github下載下傳,堅持了重試了5次,一天時間過去了,還是沒下載下傳好。放棄。
國内下載下傳1分鐘搞定:https://mirrors.huaweicloud.com/bazel/4.0.0/
感謝華為雲。