副本

回報問題 查看原始碼

用於 C++ 編譯、連結及指令列產生的公用程式。

會員

action_is_enabled

bool cc_common.action_is_enabled(feature_configuration, action_name)

如果功能設定已啟用特定 action_config,則傳回 True。

參數

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

CcToolchainInfo

Provider cc_common.CcToolchainInfo

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

compile

tuple cc_common.compile(actions, feature_configuration, cc_toolchain, srcs=[], public_hdrs=[], private_hdrs=[], includes=[], quote_includes=[], system_includes=[], framework_includes=[], defines=[], local_defines=[], include_prefix='', strip_include_prefix='', user_compile_flags=[], compilation_contexts=[], name, disallow_pic_outputs=False, disallow_nopic_outputs=False, additional_inputs=[])

應用於 C++ 編譯。傳回 (CompilationContext, CcCompilationOutputs) 的元組。

參數

參數 說明
actions 需要
actions 物件。
feature_configuration 所需
feature_configuration
cc_toolchain 需要
才能使用 CcToolchainInfo 提供者。
srcs 預設值為 []
要編譯的來源檔案清單。
public_hdrs 預設值為 []
srcs 編譯所需的標頭清單,而且可能會由相依規則間接加入。
private_hdrs 預設值為 []
src 編譯所需的標頭清單,而「不」應納入相依規則中。
includes sequence;或 depset;預設值為 []
針對由角括號和引號參照的標頭檔案搜尋路徑。通常與 -I 一樣。間接套用至相依項目。
quote_includes 預設值為 []
搜尋引號參照標頭檔案的路徑,例如 #include "foo/bar/header.h"。它們可以是相對於執行根目錄或絕對值。通常會以 -i 引號傳遞。間接套用至相依項目。
system_includes 預設值為 []
針對由角括號參照的標頭檔案搜尋路徑,例如 #include <foo/bar/header.h>。這些路徑可以是執行根目錄或絕對的相對值。通常會透過 -isystem 傳遞。間接套用至相依項目。
framework_includes 預設值為 []
搜尋 Apple 架構標頭檔案的路徑。它們可以是相對於執行根目錄或絕對值。通常以 -F 通過。間接套用至相依項目。
defines 預設值為 []
要編譯這個目標所需的定義集。每個定義都是字串。間接套用至相依項目。
local_defines 預設值為 []
要編譯這個目標所需的定義集。每個定義都是字串。不會間接套用至相依項目。
include_prefix 預設值為 ''
要加入這項規則標頭路徑的前置字串。設定後,即可在此規則的 hdrs 屬性中存取標頭,而這個屬性的值會置於存放區相關路徑的前面。系統會先移除 trip_include_prefix 屬性的前置字串,再新增這個前置字串。
strip_include_prefix 預設值為 ''
要從這項規則的標頭路徑中移除的前置字串。設定後,這項規則的 hdrs 屬性中的標頭會遭到截斷,讓使用者可在路徑中存取這個規則。如果是相對路徑,則系統會視為套件相關路徑。若是絕對路徑,系統會將其視為存放區相關路徑。系統會移除這個前置字串後,加入 include_prefix 屬性的前置字串。
user_compile_flags 預設為 []
其他編譯選項清單。
compilation_contexts 預設值為 []
標頭來自用於編譯的依附元件。
name 必要
此範圍可用於命名此方法所建立動作的輸出構件。另請參閱「main_output」引數。
disallow_pic_outputs 預設值為 False
是否應建立 PIC 輸出內容。
disallow_nopic_outputs 預設值為 False
是否應建立 NOPIC 輸出。
additional_inputs 預設值為 []
您會看見來自 srcs 編譯所需的其他檔案清單

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)

建立 CcToolchainConfigInfo 提供者

參數

參數 說明
ctx 必要的
規則內容。
features 預設值為 []
包含一項功能的所有標記規格。

引數:

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

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

flag_sets:FlagSet 清單。如果啟用了指定功能,系統會將旗標集套用至指定的動作。

env_sets:EnvSet 清單。如果指定功能已啟用,系統會將環境組合套用至其指定的動作。

requires:功能集清單,用於定義工具鍊支援此功能的時機。如果有任何功能集完全套用 (也就是啟用一組功能的所有功能),系統就會支援該功能。如果省略 requires,系統會獨立支援這項功能,不受其他已啟用的功能影響。在這個範例中,請使用這個範例根據啟用的建構模式 (opt / Fastbuild / dbg) 篩選標記。

implies:功能啟用時會自動啟用的功能或動作設定字串清單。如果無法啟用任何隱含的功能或動作設定,系統也不會啟用這個功能 (靜音)。

provides:與這個地圖項目相衝突的名稱清單。

如果出現以下情形,您就無法啟用某項功能:
- provides 包含要啟用的其他功能或動作設定名稱。
- provides 包含與我們要啟用的其他功能或動作設定中的「provides」值。使用此方法,就能確保不相容的功能無法意外啟用,導致難以診斷編譯器錯誤。
action_configs 預設值為 []
動作設定會對應至 Bazel 動作,並允許根據已啟用的功能選取工具。動作設定的啟用方式與功能相同:功能可以「需要」或「隱含」動作設定,運作方式與使用其他功能相同。

引數:

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++ 編譯專用目錄。這些應為編譯器使用的確切路徑,且通常相對於 exec 根目錄。

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

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

相對路徑已解析為設定檔目錄的相對路徑。

如果編譯器支援 --sysroot 支援,這些路徑則應使用 %sysroot% 而非 include 路徑,並且指定 sysroot 屬性,以提供正確取代工具所需的資訊。

toolchain_identifier 必要

Crosstool 版本中的工具鍊專屬 ID。這必須是路徑中的目錄名稱。

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

host_system_name string;或 None;預設值為 None
已忽略。
target_system_name 必須提供
GNU 系統名稱。
target_cpu 必填
目標架構字串。
target_libc 必要
libc 版本字串 (例如「glibc-2.2.2」)。如果字串是「macosx」,則系統會將平台假設為 MacOS。否則,Linux
compiler 必要
編譯器字串 (例如「gcc」)。系統會以旗標值的形式向 `@bazel_tools//tools/cpp:compiler (compiler_flag)` 會公開目前工具鍊的編譯器。如果目標需要編譯器專屬旗標,則可在 select() 陳述式中使用 https://github.com/bazelbuild/rules_cc/blob/main/cc/compiler/BUILD 使用 config_settings;如果現有設定已不足,也可建立自訂 config_setting。
abi_version string;或 None;預設值為 None
使用中的 abi,為 gcc 版本。E.g.: 「gcc-3.4」
abi_libc_version string;或 None;預設值為 None
我們使用的 abi 使用的 glibc 版本。
tool_paths 預設為 []
工具位置。

引數:

name:工具名稱。

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

make_variables 預設值為 []
規則可存取的化變數。
builtin_sysroot string;或 None;預設值為 None
內建 sysroot。如果這個屬性不存在,Bazel 就不會允許使用其他 sysroot,例如透過 --grte_top 選項。

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"。它們可以是相對於執行根目錄或絕對值。通常會以 -i 引號傳遞
framework_includes 預設值為 unbound
標頭檔案的架構搜尋路徑組合 (僅限 Apple 平台)
defines 預設值為 unbound
要編譯這個目標所需的定義集。每個定義都是字串。遞移至相依項目。
local_defines 預設值為 unbound
要編譯這個目標所需的定義集。每個定義都是字串。不會間接套用至相依項目。

create_compilation_outputs

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

建立編譯輸出物件。

參數

參數 說明
objects depsetNone;預設值為 None
物件檔案清單。
pic_objects depsetNone;預設為 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 傳遞到此
user_compile_flags stringsequence;或 None;預設為 None
其他編譯標記 (copts) 的清單。
include_directories depsetNone;預設為 None
Depset of include 目錄。
quote_include_directories depsetNone;預設值為 None
空白引用包含目錄。
system_include_directories depsetNone;預設值為 None
系統 Depset of system has 主體目錄。
framework_include_directories depsetNone;預設值為 None
Depset of Framework include Catalog.
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
Unused。
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 檔案None;預設為要連結的靜態資料庫的 None
File
pic_static_library 檔案None;預設為要連結圖片靜態資料庫的 None
File
dynamic_library 檔案None;預設為要連結的動態資料庫 None
File。一律用於執行階段,如未傳遞 interface_library,則會用於連結。
interface_library 檔案None;預設為要連結的介面程式庫 None
File
pic_objects Filesequence;預設為 unbound
實驗功能,請勿使用
objects Filesequence;預設為 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, 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
分離了連結器在連結時尋找程式庫的目錄。
None ;或 depset;預設值為 None
依據載入器在執行階段尋找程式庫的目錄。
None;或 sequence;預設為 None
其他連結旗標 (linkopts) 清單。
預設為 None
選用的輸出檔案路徑。
預設為 None
選用參數檔案路徑。
預設值為 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
Unused。

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)。我們不建議使用後者,因為它只會基於相容性目的而保持不變。如果您想透過未扁平化的 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
Depset 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 required
動作的名稱。必須是 @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 required
動作的名稱。必須是 @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 required
動作的名稱。必須是 @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 required
動作的名稱。必須是 @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]戳記標記覆寫的預設行為。產生測試規則的可執行輸出內容時,請設定這個值 (或設為 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 預設為 []