天天看點

Bazel介紹——建立一個C++項目使用Bazel建構

使用Bazel建構

設定工作區(workspace)

在建構項目之前,需要設定其工作區。 工作區是儲存項目源檔案和Bazel建構輸出的目錄。 它還包含Bazel認為特殊的檔案:

  • WORKSPACE檔案将目錄及其内容辨別為Bazel工作區,并居住在項目目錄結構的根目錄,
  • 一個或多個BUILD檔案,它告訴Bazel如何建構項目的不同部分。 (工作空間中包含BUILD檔案的目錄是一個包,您将在本教程中稍後了解包。)

要将目錄指定為Bazel工作區,請在該目錄中建立一個名為WORKSPACE的空檔案。

當Bazel建構項目時,所有輸入和依賴項必須在同一個工作空間中。 駐留在不同工作空間中的檔案彼此獨立,除非已經連結,這超出了本教程的範圍。

了解BUILD檔案

BUILD檔案包含Bazel的幾種不同類型的說明。 最重要的類型是建構規則,它告訴Bazel如何建構所需的輸出,如可執行二進制檔案或庫。 BUILD檔案中的建構規則的每個執行個體都稱為目标,并指向一組特定的源檔案和依賴關系。 目标也可以指向其他目标。

看看cpp-tutorial / stage1 / main目錄下的BUILD檔案:

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

在我們的例子中,hello-world目标執行個體化了Bazel的内置cc_binary規則。 該規則告訴Bazel從沒有依賴關系的hello-world.cc源檔案建構一個自包含的可執行二進制檔案。

目标中的屬性顯式聲明其依賴關系和選項。 雖然name屬性是必需的,但很多是可選的。 例如,在hello-greet目标中,name是不言自明的,srcs指定Bazel建構目标的源檔案。

建設項目

我們來建構您的示例項目。 更改為cpp-tutorial / stage1目錄并運作以下指令:

注意目标标簽 - // main:part是我們的BUILD檔案相對于工作空間根目錄的位置,hello-world是我們在BUILD檔案中命名的目标。 (本教程結尾将更詳細地了解目标标簽。)

Bazel産生的輸出類似于以下内容:

INFO: Found  target...
Target //main:hello-world up-to-date:
  bazel-bin/main/hello-world
INFO: Elapsed time: s, Critical Path: s
           

恭喜,您剛剛建立了您的第一個Bazel目标! Bazel将建構輸出放在工作區根目錄下的bazel-bin目錄中。 浏覽其内容,了解Bazel的輸出結構。

現在測試你建立的二進制檔案:

繼續閱讀