天天看點

bazel學習總結(一)

Bazel是一個開源的建構和測試工具,和Make,Maven,Gradle可以看成一類東西。不過Bazel的建構語言更進階,可讀性更好,支援多語言、跨平台。Bazel支援跨多個存儲庫的大型代碼庫和大量使用者。

一、Bazel的優點表現在下面5個方面:

1)進階建構語言:與其他工具不同,Bazel使用庫、二進制檔案、腳本和資料集的概念,避免了編寫檔案對編譯器和連結器等工具進行調用的複雜性,是以Bazel在描述項目的建構屬性上可讀性更好。

2)快速可靠:Bazel緩存之前的操作,跟蹤檔案内容和編譯指令的修改,通過這種方式,Bazel知道什麼時候需要重建,并且隻重建修改的地方。為了進一步加快建構速度,還可以将項目設定為以高度并行和增量的方式建構。

3)跨平台:Bazel可以運作在Linux、macOS和Windows上。Bazel可以從同一個項目為多個平台(包括desktop, server, and mobile)建構二進制檔案和可部署包。

4)規模大:Bazel在處理100k+源檔案的建構時保持了靈活性,可以與多個存儲庫和數以萬計的使用者群協同工作。

5)可擴充:支援多種語言,可以擴充Bazel以支援任何其他語言或架構。

總的來說就是好處多,友善用,代碼量多或是開發人員多的情況下依然能表現良好。

二、怎麼使用Bazel?

1)肯定是先安裝:

1、添加包源:
sudo apt install curl gnupg
curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel.gpg
sudo mv bazel.gpg /etc/apt/trusted.gpg.d/
echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
2、安裝:
sudo apt update && sudo apt install bazel

sudo apt update && sudo apt full-upgrade

sudo apt install bazel-1.0.0 (預設安裝最新版本,這裡指定了版本1.0.0)
           

2)設定一個workspace,它是Bazel查找建構輸入和建構檔案以及存儲建構輸出的目錄。

3)編寫一個BUILD,告訴Bazel要建構什麼以及如何建構。

Bazel用Starlark文法來編寫workspace/BUILD檔案,它們是類似于Make中的makeifle、CMake中的CMakeLists的存在。

package(default_visibility = ["//visibility:public"])

load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")

cc_library(
    name = "hello-lib",
    srcs = ["hello-lib.cc"],
    hdrs = ["hello-lib.h"],
)

cc_binary(
    name = "hello-world",
    srcs = ["hello-world.cc"],
    deps = [":hello-lib"],
)

cc_test(
    name = "hello-success_test",
    srcs = ["hello-world.cc"],
    deps = [":hello-lib"],
)

cc_test(
    name = "hello-fail_test",
    srcs = ["hello-fail.cc"],
    deps = [":hello-lib"],
)

filegroup(
    name = "srcs",
    srcs = glob(["**"]),
)
           

建構目标指定了一組Bazel将建構的輸入工件、它們的依賴項、Bazel将用于建構它的建構規則以及配置建構規則的選項。

建構規則指定Bazel将使用的建構工具(如編譯器和連結器)及其配置。Bazel附帶了許多建構規則,涵蓋了受支援平台上受支援語言中最常見的工件類型。

4)運作

運作指令類似:
bazel [<startup options>] <command> [<args>]

bazel [<startup options>] <command> [<args>] -- [<target patterns>]
           

三、Bazel的運作過程可以參考這篇文章bazel學習總結(一)

四、Bazel有個叫action graph的東西,應該就是DAG吧

action graph表示建構工件、它們之間的關系以及Bazel将執行的建構動作。借助此圖,Bazel可以跟蹤對檔案内容的更改以及對操作(如建構或測試指令)的更改,并知道以前完成了哪些建構工作。該圖還使您能夠輕松地跟蹤代碼中的依賴項。

繼續閱讀