本頁面含有可協助您在 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_prefix
和strip_include_prefix
引數。
工具鍊功能
下列選用功能可改善 C++ 專案的健全度。您可使用 --features
指令列旗標或 repo
的 features
屬性、package
或 cc_*
規則啟用這些限制:
- 有了
parse_headers
功能,就能在使用--process_headers_in_dependencies
標記時,透過 C++ 編譯器剖析 (但不會編譯) 建構目標及其依附元件中的所有標頭檔案。這有助於找出僅限標頭程式庫中的問題,並確保標頭彼此獨立,且與包含順序無關。 layering_check
功能會強制要求目標只包含其直接依附元件提供的標頭。在 Linux 上使用clang
做為編譯器時,預設工具鍊支援這項功能。