本頁說明如何在不同層級整合 C++ 規則。
存取 C++ 工具鍊
因為
持續遷移 C++ 規則
改為平台
工具鍊,您
應使用位於
@bazel_tools//tools/cpp:toolchain_utils.bzl,
停用及啟用工具鍊時,兩者皆可運作。依附於 C++
將工具鍊加入規則
Label
敬上
屬性的名稱為 _cc_toolchain
到 @bazel_tools//tools/cpp:current_cc_toolchain
(
cc_toolchain_alias
規則,指向目前所選的 C++ 工具鍊)。
接著在規則實作中
find_cpp_toolchain(ctx)
敬上
來取得
CcToolchainInfo
。
請參閱完整的應用範例
詳情請參閱 Rules_cc 範例。
使用 C++ 工具鍊產生指令列和環境變數
一般來說,您並與 C++ 工具鍊整合,才能取得相同的 與 C++ 規則一樣,但無需直接使用 C++ 動作。 這是因為當我們自行編寫動作時 持續與 C++ 工具鍊搭配使用,例如傳送 C++ 指令列 標記至工具,在背景叫用 C++ 編譯器。
C++ 規則以特殊方式,根據功能建構指令列 設定如何建構指令列 您需要:
features
和action_configs
- 這些報導來自「CcToolchainConfigInfo
」 並封裝於CcToolchainInfo
FeatureConfiguration
- 由 cc_common.configure_features 傳回- cc 工具鍊設定變數 - 傳回者 cc_common.create_compile_variables 或 cc_common.create_link_variables.
但仍有工具專屬的 getter,例如
compiler_executable。
優先使用 get_tool_for_action
,因為工具專屬的 getter 會
最終會遭到移除
請參閱完整的應用範例 詳情請參閱 Rules_cc 範例。
實作依附於 C++ 規則和/或 C++ 規則可依附的 Starlark 規則
大部分 C++ 規則提供
CcInfo
、
包含 CompilationContext
的提供者
和
LinkingContext
。
您可以透過這些程式存取資訊 (例如所有遞移標頭)
或程式庫加以連結由 CcInfo
和 CcToolchainInfo
自訂提供
Starlark 規則應該要能取得所有所需資訊。
如果自訂 Starlark 規則提供 CcInfo
,則是 C++ 規則的信號
他們也能依賴這個系統不過,如果您只需要
CcInfo
遍過圖形到二進制規則,並使用該規則加以包裝
已有其他供應商的 CcInfo
。舉例來說,如果目標為 java_library
的規則
傳播至 java_binary
的原生依附元件時,不應提供
直接CcInfo
(視java_library
而定,cc_binary
並不合理)
例如 JavaCcInfo
請參閱完整的應用範例 詳情請參閱 Rules_cc 範例。
重複使用 C++ 規則的邏輯和動作
目前尚未穩定;API 穩定之後,這個章節就會更新。追蹤 #4570 最新 資訊。