副本

回報問題 查看原始碼 夜間 7.2 7.1 7.0 6.5 6.4 用於 C++ 編譯、連結和指令列生成的公用程式。

成員

action_is_enabled

bool cc_common.action_is_enabled(feature_configuration, action_name)

如果功能設定中啟用指定的 action_config,則傳回 True。

參數

參數 說明
feature_configuration 必要
要查詢的功能設定。
action_name 必要
action_config 的名稱。

CcToolchainInfo

Provider cc_common.CcToolchainInfo

這個金鑰用於擷取提供者,其中包含目前使用的 C++ 工具鍊相關資訊

configure_features

FeatureConfiguration cc_common.configure_features(ctx=None, cc_toolchain, language=None, requested_features=[], unsupported_features=[])

建立 feature_configuration 執行個體。需要 cpp 設定片段。

參數

參數 說明
ctx ctx;或 None; 預設值為 None
規則背景資訊。
cc_toolchain 必要
我們設定特徵的 cc_toolchain。
language string;或 None; 預設值為 None
要設定的語言:c++ 或 objc (預設 c++)
requested_features 預設值為 []
要啟用的功能清單。
unsupported_features 預設值為 []
目前規則不支援的功能清單。

create_cc_toolchain_config_info

CcToolchainConfigInfo cc_common.create_cc_toolchain_config_info(ctx, features=[], action_configs=[], artifact_name_patterns=[], cxx_builtin_include_directories=[], toolchain_identifier, host_system_name=None, target_system_name, target_cpu, target_libc, compiler, abi_version=None, abi_libc_version=None, tool_paths=[], make_variables=[], builtin_sysroot=None, cc_target_os=None)

建立 CcToolchainConfigInfo 提供者

參數

參數 說明
ctx 必要
規則背景資訊。
features 預設值為 []
包含一項功能的所有旗標規格。

引數:

name:地圖項目的名稱。您可以在不變更 Bazel 的情況下,新增「功能」來導入功能區段至工具鍊中,並在 BUILD 檔案中將對應的字串新增為地圖項目。

enabled:如果值為「True」,除非規則類型明確標示為不支援,否則這項功能會啟用。

flag_sets:旗標集清單。如果特定功能已啟用,則旗標集會套用至指定的動作。

env_sets:EnvSet 清單。如果啟用了特定功能,環境組合就會套用至指定的動作。

requires:一系列功能集,定義工具鍊支援這項功能的時機。如果某項功能集已完全套用 (亦即功能集的所有功能皆已啟用),系統支援該功能。如果省略 requires,系統會獨立支援該功能,而不會啟用其他功能。以下範例用於根據已啟用的建構模式篩選標記 (opt / Fastbuild / dbg)。

implies:功能或動作設定的字串清單,在啟用這項功能後會自動啟用。如果無法啟用任何隱含的功能或動作設定,系統就不會啟用這項功能。

provides:此功能衝突的名稱清單。

如果發生下列情況,就無法啟用功能:
- provides 包含要啟用的其他功能或動作設定名稱。
- provides 與「Provides」值相同的值另一個要啟用的功能或動作設定請使用這個程式碼,確保不相容的功能無法意外同時啟用,進而難以診斷編譯器錯誤。
action_configs 預設值為 []
動作設定會對應至 Bazel 動作,並允許依據已啟用的功能選取工具。動作設定啟用作業的語意與功能相同:功能可以「require」或「imply」動作設定與動作設定的方式相同。

引數:

action_name:這項設定所套用的 Bazel 動作名稱,例如「c-compile」或「c-module-compile」

enabled:如果值為「True」,除非規則類型明確將規則標示為不支援,否則這項操作就會啟用。

tools:套用至動作的工具將是第一個提供符合功能設定的功能集的工具。如果沒有工具符合所提供功能設定,就會擲回錯誤。因此,建議您在預設工具中保留空白的地圖項目集。

flag_sets:如果已啟用指定動作設定,標記集就會套用至對應的動作。

implies:啟用這項動作設定時會自動啟用的功能或動作設定清單。如果無法啟用任何隱含的功能或動作設定,系統將不會啟用這項動作設定。

artifact_name_patterns 預設值為 []
為特定動作輸入或輸出構件的構件名稱。

引數:

category_name:要套用此選項的構件類別。這個欄位會與 Bazel 中定義的類別清單進行比較。類別範例包括「linked_output」或所選項目的構件這會與擴充功能一起用於根據目標名稱建立成果名稱。

extension:為這個選項建立構件的擴充功能。同時加上前置字串,即可根據目標名稱建立構件名稱。

cxx_builtin_include_directories 預設值為 []

內建 C++ 編譯適用的目錄。這些路徑應為編譯器使用的確切路徑,且通常與執行根目錄相關。

編譯器使用的路徑可以透過「gcc -E -xc++ - -v」決定。

我們目前也會使用 C++ 路徑進行 C 編譯,只要 C++ 和 C 標頭檔案之間沒有名稱衝突,就能放心。

相對路徑是根據設定檔目錄解析。

如果編譯器支援 --sysroot,則這些路徑應使用 %sysroot% 而非 include 路徑,並指定 sysroot 屬性,以便提供做出正確替換所需的資訊。

toolchain_identifier 必要

跨工具版本工具鍊的專屬 ID。可以用此名稱做為路徑中的目錄名稱。

必須與下列規則運算式相符:[a-zA-Z_][\.\- \w]*

host_system_name string;或 None; 預設值為 None
已忽略。
target_system_name 必要
GNU 系統名稱。
target_cpu 必要
目標架構字串。
target_libc 必要
libc 版本字串 (例如「glibc-2.2.2」)。
compiler 必要
編譯器版本字串 (例如「gcc-4.1.1」)。
abi_version string;或 None; 預設值為 None
使用的 Abi,用於 GCC 版本。例如:「gcc-3.4」
abi_libc_version string;或 None; 預設值為 None
我們使用的 Abi 使用的 glibc 版本。
tool_paths 預設值為 []
工具位置。

引數:

name:工具的名稱。

path:工具位置;可以是絕對路徑 (非密封工具鍊的情況下),或相對於 cc_toolchain 套件的路徑。

make_variables 預設值為 []
可供規則存取的 make 變數。
builtin_sysroot string;或 None; 預設值為 None
內建的 sysroot。如果沒有這個屬性,Bazel 不允許使用其他 sysroot,也就是透過 --grte_top 選項。
cc_target_os string;或 None; 預設值為 None
僅供內部使用,請勿使用。

create_compilation_context

CompilationContext cc_common.create_compilation_context(headers=unbound, system_includes=unbound, includes=unbound, quote_includes=unbound, framework_includes=unbound, defines=unbound, local_defines=unbound)

可建立 CompilationContext

參數

參數 說明
headers 預設值為 unbound
編譯這個目標所需的標頭組合
system_includes 預設值為 unbound
一組搜尋路徑,用於使用角括號參照的標題檔案,例如 #include <foo/bar/header.h>。可以相對於執行根層級或絕對值。通常會與 isystem 一併傳送
includes 預設值為 unbound
標頭檔案的搜尋路徑組合,同時以角括號和引號參照。通常以 -I 傳遞
quote_includes 預設值為 unbound
一組使用引號所參照標頭檔案的搜尋路徑,例如 #include "foo/bar/header.h"。可以相對於執行根層級或絕對值。通常會以「iquote」結尾
framework_includes 預設值為 unbound
標頭檔案的架構搜尋路徑組合 (僅適用於 Apple 平台)
defines 預設值為 unbound
編譯這個目標所需的定義集。每個定義都是一個字串。遞移到相依元件。
local_defines 預設值為 unbound
編譯這個目標所需的定義集。每個定義都是一個字串。不會連帶套用至相依項目。

create_compilation_outputs

CcCompilationOutputs cc_common.create_compilation_outputs(objects=None, pic_objects=None)

建立編譯輸出物件。

參數

參數 說明
objects depset;或 None; 預設值為 None
物件檔案清單。
pic_objects depset;或 None; 預設值為 None
圖片物件檔案清單。

create_compile_variables

Variables cc_common.create_compile_variables(cc_toolchain, feature_configuration, source_file=None, output_file=None, user_compile_flags=None, include_directories=None, quote_include_directories=None, system_include_directories=None, framework_include_directories=None, preprocessor_defines=None, thinlto_index=None, thinlto_input_bitcode_file=None, thinlto_output_object_file=None, use_pic=False, add_legacy_cxx_options=False, variables_extension=unbound)

傳回用於編譯動作的變數。

參數

參數 說明
cc_toolchain 必要
要建立建構變數的 cc_toolchain。
feature_configuration 必要
要查詢的功能設定。
source_file 預設值為 None
編譯的選用來源檔案。最好將 source_file 傳遞至這裡,而非附加在 cc_common.get_memory_inefficiency_command_line 產生的指令列末端,如此便能由工具鍊作者的強大功能指定與放置編譯器標記。
output_file 預設值為 None
選用的編譯輸出檔案。最好將 output_file 傳遞至 cc_common.get_memory_inefficiency_command_line 產生的指令列結尾,這樣就可以由工具鍊作者的強大功能指定與放置編譯器標記。
user_compile_flags 字串序列;或 None; 預設值為 None
其他編譯旗標的清單 (快取)。
include_directories depset;或 None; 預設值為 None
包含目錄的插邊。
quote_include_directories depset;或 None; 預設值為 None
引用率包括目錄。
system_include_directories depset;或 None; 預設值為 None
系統的插邊包括目錄。
framework_include_directories depset;或 None; 預設值為 None
架構分割包含目錄。
preprocessor_defines depset;或 None; 預設值為 None
預先處理工具的 Depset 定義。
thinlto_index string;或 None; 預設值為 None
LTO 索引檔案路徑。
thinlto_input_bitcode_file string;或 None; 預設值為 None
輸入到 LTO 後端的位元碼檔案。
thinlto_output_object_file string;或 None; 預設值為 None
LTO 後端輸出的物件檔案。
use_pic 預設值為 False
如果為 true,編譯會產生位置獨立的程式碼。
add_legacy_cxx_options 預設值為 False
未使用。
variables_extension dict; 預設值為 unbound
編譯動作使用的其他變數字典。

LibraryToLink cc_common.create_library_to_link(actions, feature_configuration=None, cc_toolchain=None, static_library=None, pic_static_library=None, dynamic_library=None, interface_library=None, pic_objects=unbound, objects=unbound, alwayslink=False, dynamic_library_symlink_path='', interface_library_symlink_path='')

建立「LibraryToLink

參數

參數 說明
actions 必要
actions 物件。
feature_configuration 預設值為 None
待查詢 feature_configuration
cc_toolchain 預設值為 None
要使用的 CcToolchainInfo 供應商。
static_library File;或 None; 預設值為 None
要連結的靜態資料庫 File
pic_static_library File;或 None; 預設值為 None
要連結的靜態資料庫 File
dynamic_library File;或 None; 預設值為 None
要連結的動態程式庫 File。一律用於執行階段,如未傳遞 interface_library,則用於連結。
interface_library File;或 None; 預設值為 None
要連結的介面程式庫 File
pic_objects 檔案序列; 預設值為 unbound
實驗功能,不使用
objects 檔案序列; 預設值為 unbound
實驗功能,不使用
預設值為 False
是否連結 --whole_Archive 區塊中的靜態資料庫/物件。
string; 預設值為 ''
覆寫 Solib 目錄中動態程式庫連結的預設路徑。空白字串會使用預設值。
預設值為 ''
覆寫 Solib 目錄中介面程式庫連結的預設路徑。空白字串會使用預設值。

Variables cc_common.create_link_variables(cc_toolchain, feature_configuration, library_search_directories=None, runtime_library_search_directories=None, user_link_flags=None, output_file=None, param_file=None, def_file=None, is_using_linker=True, is_linking_dynamic_library=False, must_keep_debug=True, use_test_only_flags=False, is_static_linking_mode=True)

傳回用於連結動作的連結變數。

參數

參數 說明
必要
要建立建構變數的 cc_toolchain。
必要
要查詢的功能設定。
None;或 depset; 預設值為None
連結器在連結時尋找程式庫的目錄 DepSet。
None;或 depset; 預設值為None
載入器在執行階段尋找程式庫的目錄 DepSet。
None;或 sequence; 預設值為None
其他連結旗標 (linkopts) 清單。
預設值為 None
選用的輸出檔案路徑。
預設值為 None
選用的參數檔案路徑。
預設值為 None
選用的 .def 檔案路徑。
預設值為 True
使用連接器時為 True,封存器則為 False。呼叫端負責將此名稱與所用的動作名稱保持同步 (is_using_linker = True,用於連結可執行檔或動態程式庫,is_using_linker = False 用於封存靜態資料庫)。
預設值為 False
建立動態程式庫時為 True,如果可執行檔或靜態程式庫,則為 False。呼叫端負責讓此內容和使用的動作名稱保持同步。修正 b/65151735 後,系統就會移除這個欄位。
預設值為 True
如果設為 False,Bazel 會顯示「strip_debug_symbols」變數,通常用於使用連結器來移除輸出檔案中的偵錯符號。
預設值為 False
設為 true 時,'is_cc_test'將會設定變數。
預設值為 True
未使用。

create_linker_input

LinkerInput cc_common.create_linker_input(owner, libraries=None, user_link_flags=None, additional_inputs=None)

可建立 LinkerInput

參數

參數 說明
owner 必要
產生此輸入所用所有檔案的目標標籤。
libraries None;或 depset; 預設值為None
LibraryToLink 清單。
None;字串depset;或序列字串; 預設值為 None
以字串形式傳遞的使用者連結標記。接受 [String]、[[String]] 或 depset(String)。不建議使用後者,因為這只會為了相容性目的而保留,而且偏移會壓平。如果您想要透過 unflattened depsets() 將 user_link_flags 納入 LinkerInput 中,不要將其壓平至結尾。
additional_inputs None;或 depset; 預設值為None
為連結動作輸入其他輸入內容,例如連結指令碼。

create_linking_context

LinkingContext cc_common.create_linking_context(linker_inputs=None, libraries_to_link=None, user_link_flags=None, additional_inputs=None)

可建立 LinkingContext

參數

參數 說明
linker_inputs None;或 depset; 預設值為None
LinkerInput 的插邊。
None;或 sequence; 預設值為None
已淘汰,此參數已淘汰,並將在近期內移除。請勿仰賴這項功能。這項功能已停用 --+incompatible_require_linker_input_cc_api。請使用這個標記確認您的程式碼是否與即將移除的程式碼相容。
清單:LibraryToLink
None;或 sequence; 預設值為None
已淘汰,此參數已淘汰,並將在近期內移除。請勿仰賴這項功能。這項功能已停用 --+incompatible_require_linker_input_cc_api。請使用這個標記確認您的程式碼是否與即將移除的程式碼相容。
以字串形式傳遞的使用者連結標記清單。
additional_inputs None;或 sequence; 預設值為None
已淘汰,此參數已淘汰,並將在近期內移除。請勿仰賴這項功能。這項功能已停用 --+incompatible_require_linker_input_cc_api。請使用這個標記確認您的程式碼是否與即將移除的程式碼相容。
輸入連結動作的其他輸入內容,例如連結指令碼。

create_linking_context_from_compilation_outputs

tuple cc_common.create_linking_context_from_compilation_outputs(actions, feature_configuration, cc_toolchain, compilation_outputs, user_link_flags=[], linking_contexts=[], name, language='c++', alwayslink=False, additional_inputs=[], disallow_static_libraries=False, disallow_dynamic_library=False)

用於建立可於下游傳播資訊的程式庫規則,以便稍後透過可遞移連結建立執行檔或動態程式庫的頂層規則連結。傳回 (CcLinkingContext, CcLinkingOutputs) 的元組。

參數

參數 說明
actions 必要
actions 物件。
feature_configuration 必要
feature_configuration 尚未查詢。
cc_toolchain 必要
要使用的「CcToolchainInfo」供應商。
compilation_outputs 必要
編譯輸出,包含要連結的物件檔案。
預設值為 []
其他連結選項清單。
linking_contexts 預設值為 []
來自依附元件的程式庫。這些程式庫會連結至 link() 呼叫的輸出構件,例如二進位檔或程式庫。
name 必要
這會用來為此方法建立的動作命名輸出構件。
language 預設值為 'c++'
目前僅支援 C++。請勿使用這個參數,
預設值為 False
是否一律連結此程式庫。
additional_inputs 預設值為 []
為連結動作輸入其他輸入內容,例如連結指令碼。
disallow_static_libraries 預設值為 False
是否應建立靜態資料庫。
disallow_dynamic_library 預設值為 False
是否應建立動態資料庫。

do_not_use_tools_cpp_compiler_present

None cc_common.do_not_use_tools_cpp_compiler_present

請勿使用此欄位,其唯一用途是協助從 config_setting.values{'compiler') 遷移至 config_settings.flag_values{'@bazel_tools//tools/cpp:compiler'}

get_environment_variables

dict cc_common.get_environment_variables(feature_configuration, action_name, variables)

傳回要為特定動作設定的環境變數。

參數

參數 說明
feature_configuration 必要
要查詢的功能設定。
action_name 必要
動作名稱。必須是 @bazel_tools//tools/build_defs/cc:action_names.bzl (https://github.com/bazelbuild/bazel/blob/master/tools/build_defs/cc/action_names.bzl) 中的其中一個名稱
variables 必要
用於展開範本的建構變數。

get_execution_requirements

sequence cc_common.get_execution_requirements(feature_configuration, action_name)

傳回特定動作的執行要求。

參數

參數 說明
feature_configuration 必要
要查詢的功能設定。
action_name 必要
動作名稱。必須是 @bazel_tools//tools/build_defs/cc:action_names.bzl (https://github.com/bazelbuild/bazel/blob/master/tools/build_defs/cc/action_names.bzl) 中的其中一個名稱

get_memory_inefficient_command_line

sequence cc_common.get_memory_inefficient_command_line(feature_configuration, action_name, variables)

使用指定用於展開的變數,傳回指定動作的整併指令列標記。扁平化的巢狀集合,在理想情況下不應使用,或至少不應超越即時分析。正在執行傳回 Args 的高記憶體效率函式。

參數

參數 說明
feature_configuration 必要
要查詢的功能設定。
action_name 必要
動作名稱。必須是 @bazel_tools//tools/build_defs/cc:action_names.bzl (https://github.com/bazelbuild/bazel/blob/master/tools/build_defs/cc/action_names.bzl) 中的其中一個名稱
variables 必要
建立範本時要使用的建構變數。

get_tool_for_action

string cc_common.get_tool_for_action(feature_configuration, action_name)

傳回指定動作的工具路徑。

參數

參數 說明
feature_configuration 必要
要查詢的功能設定。
action_name 必要
動作名稱。必須是 @bazel_tools//tools/build_defs/cc:action_names.bzl (https://github.com/bazelbuild/bazel/blob/master/tools/build_defs/cc/action_names.bzl) 中的其中一個名稱

is_enabled

bool cc_common.is_enabled(feature_configuration, feature_name)

如果功能設定中已啟用指定功能,則傳回 True。

參數

參數 說明
feature_configuration 必要
要查詢的功能設定。
feature_name 必要
功能名稱。

CcLinkingOutputs cc_common.link(actions, feature_configuration, cc_toolchain, compilation_outputs=None, user_link_flags=[], linking_contexts=[], name, language='c++', output_type='executable', link_deps_statically=True, stamp=0, additional_inputs=[], additional_outputs=unbound)

應用於 C++ 遞移連結。

參數

參數 說明
actions 必要
actions 物件。
feature_configuration 必要
feature_configuration 尚未查詢。
cc_toolchain 必要
要使用的「CcToolchainInfo」供應商。
compilation_outputs CcCompilationOutputs;或 None; 預設值為 None
編譯輸出,包含要連結的物件檔案。
預設值為 []
其他連接器選項清單。
linking_contexts 預設值為 []
將依附元件的結構定義連結至這項規則產生的連結結構定義。
name 必要
這會用來為此方法建立的動作命名輸出構件。
language 預設值為 'c++'
目前僅支援 C++。請勿使用這個參數,
output_type 預設值為 'executable'
可以是「executable」「dynamic_library」
預設值為 True
True 代表以靜態方式連結依附元件,否。
stamp 預設值為 0
如果 output_type 為「executable」時,表示連結的執行檔是否包含建構資訊。如果有 1,系統一律會包含建構資訊。如果為 0 (系統一律會排除預設建構資訊。如果設為 -1,則會使用預設行為,可能會遭到 --[no]stamp 標記覆寫。為測試規則產生可執行輸出內容時,應取消設定 (或設為 0)。
additional_inputs sequence;或 depset; 預設值為 []
為連結動作輸入其他輸入內容,例如連結指令碼。
additional_outputs sequence; 預設值為 unbound
如需連結動作的其他輸出內容,例如地圖檔案。

merge_compilation_contexts

CompilationContext cc_common.merge_compilation_contexts(compilation_contexts=[])

將多個 CompilationContexts 合併為一個。

參數

參數 說明
compilation_contexts 預設值為 []
待合併的 CompilationContexts 清單。每個結構定義的標頭會由傳回的供應器中的直接欄位匯出。

merge_compilation_outputs

CcCompilationOutputs cc_common.merge_compilation_outputs(compilation_outputs=[])

合併編譯輸出內容。

參數

參數 說明
compilation_outputs 預設值為 []