與 C++ 規則整合

回報問題 查看來源 夜間 7.2 7.1 7.0 6.5 6.4

本頁說明如何在不同層級整合 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++ 規則以特殊方式,根據功能建構指令列 設定如何建構指令列 您需要:

但仍有工具專屬的 getter,例如 compiler_executable。 優先使用 get_tool_for_action,因為工具專屬的 getter 會 最終會遭到移除

請參閱完整的應用範例 詳情請參閱 Rules_cc 範例

實作依附於 C++ 規則和/或 C++ 規則可依附的 Starlark 規則

大部分 C++ 規則提供 CcInfo、 包含 CompilationContext 的提供者 和 LinkingContext。 您可以透過這些程式存取資訊 (例如所有遞移標頭) 或程式庫加以連結由 CcInfoCcToolchainInfo 自訂提供 Starlark 規則應該要能取得所有所需資訊。

如果自訂 Starlark 規則提供 CcInfo,則是 C++ 規則的信號 他們也能依賴這個系統不過,如果您只需要 CcInfo 遍過圖形到二進制規則,並使用該規則加以包裝 已有其他供應商的 CcInfo。舉例來說,如果目標為 java_library 的規則 傳播至 java_binary 的原生依附元件時,不應提供 直接CcInfo (視java_library而定,cc_binary 並不合理) 例如 JavaCcInfo

請參閱完整的應用範例 詳情請參閱 Rules_cc 範例

重複使用 C++ 規則的邏輯和動作

目前尚未穩定;API 穩定之後,這個章節就會更新。追蹤 #4570 最新 資訊。