本頁面提供相關資源,協助您將 Bazel 用於 C++ 專案。其中包含教學課程、建構規則,以及使用 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_prefix和- strip_include_prefix引數。
工具鍊功能
下列選用功能可改善 C++ 專案的衛生情況。您可以使用 --features 指令列旗標或 repo、package 或 cc_* 規則的 features 屬性啟用這些規則:
- parse_headers功能可確保在使用- --process_headers_in_dependencies標記時,C++ 編譯器會剖析 (但不會編譯) 建構目標及其依附元件中的所有標頭檔。這有助於找出僅含標頭的程式庫中的問題,並確保標頭是獨立的,且與標頭的納入順序無關。
- layering_check功能會強制規定目標僅包含直接依附元件提供的標頭。根據預設,工具鍊支援 Linux 上的這項功能,並以- clang做為編譯器。