天天看點

Bazel 4.0.0在Linux下的安裝(附國内安裝包下載下傳源)

簡介

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,安裝完畢,如下圖:

Bazel 4.0.0在Linux下的安裝(附國内安裝包下載下傳源)
Bazel 4.0.0在Linux下的安裝(附國内安裝包下載下傳源)

當然還有很多安裝方式,參考官網:https://docs.bazel.build/versions/master/install-ubuntu.html

國内下載下傳源

安裝簡單,下載下傳難啊。

嘗試在github下載下傳,堅持了重試了5次,一天時間過去了,還是沒下載下傳好。放棄。

國内下載下傳1分鐘搞定:https://mirrors.huaweicloud.com/bazel/4.0.0/

感謝華為雲。