C++ 和 Bazel

回報問題 查看來源

本頁面含有可協助您在 C++ 專案中使用 Bazel 的資源。內容提供教學課程、建構規則,以及使用 Bazel 建構 C++ 專案的其他資訊。

使用 Bazel

下列資源可協助您在 C++ 專案中使用 Bazel:

最佳做法

除了一般 Bazel 最佳做法以外,以下列舉 C++ 專案的專屬最佳做法。

BUILD 檔案

建立 BUILD 檔案時,請遵循下列規範:

  • 每個 BUILD 檔案都應該包含目錄中的每個編譯單元分別有一個 cc_library 規則目標。

  • 您應盡可能將 C++ 程式庫精細化,盡可能提升增量性並平行處理建構作業。

  • 如果 srcs 中只有一個來源檔案,請將程式庫命名為該 C++ 檔案名稱。這個程式庫應包含 C++ 檔案、任何相符的標頭檔案,以及程式庫的直接依附元件。例如:

    cc_library(
        name = "mylib",
        srcs = ["mylib.cc"],
        hdrs = ["mylib.h"],
        deps = [":lower-level-lib"]
    )
    
  • 請在檔案中每個 cc_library 目標使用一個 cc_test 規則目標。並將目標 [library-name]_test 和來源檔案命名為 [library-name]_test.cc。例如,上述 mylib 程式庫目標的測試目標如下所示:

    cc_test(
        name = "mylib_test",
        srcs = ["mylib_test.cc"],
        deps = [":mylib"]
    )
    

包含路徑

納入路徑時,請遵守下列規範:

  • 將所有的 include 路徑設為與工作區目錄相對應的路徑。

  • 使用半形引號的 include (#include "foo/bar/baz.h") 做為非系統標頭,不要使用角括號 (#include <foo/bar/baz.h>)。

  • 避免使用 UNIX 目錄捷徑,例如 . (目前目錄) 或 .. (父項目錄)。

  • 如果舊版或 third_party 程式碼需要指向專案存放區以外的位置 (例如外部存放區需要前置字串),請使用 cc_library 規則目標上的 include_prefixstrip_include_prefix 引數。