副本

用於 C++ 編譯、連結和產生指令列的工具。

成員

action_is_enabled

bool cc_common.action_is_enabled(feature_configuration, action_name)

如果功能設定中已啟用指定的 action_config,則傳回「是」。

參數

參數 說明
feature_configuration 必要
要查詢的特徵設定。
action_name 必要
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=[], grep_includes=None)

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

參數

參數 說明
actions 必須的
actions 物件。
feature_configuration
feature_configuration 進行查詢。
cc_toolchain
CcToolchainInfo 供應器。
srcs default = []
要編譯的來源檔案清單。
public_hdrs default = []
編譯 src 所需的標頭清單,可能會由依附的規則間接納入。
private_hdrs default = []
編譯 src 所需的標頭清單,且不會納入依附規則。
includes default = []
以尖括號和引號同時參照的標頭檔案搜尋路徑。通常會透過 -I 傳遞。會以遞移方式傳播至依附元件。
quote_includes default = []
以引號參照的標頭檔案搜尋路徑,例如 #include "foo/bar/header.h"。可以是相對於執行根目錄的相對路徑,也可以是絕對路徑。通常會搭配 -iquote 使用。會以遞移方式傳播至依附元件。
system_includes default = []
以尖括號參照的標頭檔案搜尋路徑,例如 #include <foo/bar/header.h>。這些路徑可以是相對於執行根目錄或絕對路徑。通常會透過 -isystem 傳遞。會以遞移方式傳播至依附元件。
framework_includes default = []
Apple 架構的標頭檔搜尋路徑。可以是相對於執行根目錄的相對路徑,也可以是絕對路徑。通常會透過 -F 傳遞。會以遞移方式傳播至依附元件。
defines default = []
編譯這個目標所需的定義集。每個定義都是字串。會以遞移方式傳播至依附元件。
local_defines default = []
編譯這個目標所需的定義集。每個定義都是字串。不會以遞移方式傳播至依附元件。
include_prefix default = ''
要新增至此規則標頭路徑的前置字串。設定後,您可以在該規則的 hdrs 屬性中存取標頭,該屬性值會附加至相對於存放區的路徑。系統會先移除 strip_include_prefix 屬性中的前置字串,再新增這個前置字串。
strip_include_prefix default = ''
從此規則標頭路徑中移除的前置字串。設定後,這個規則的 hdrs 屬性中,標頭的路徑會加上這個前置字串,以便存取。如果是相對路徑,則會視為與套件相關的路徑。如果是絕對路徑,則會視為相對於存放區的路徑。在移除這個前置字元後,系統會新增 include_prefix 屬性中的前置字元。
user_compile_flags default = []
其他編譯選項清單。
compilation_contexts default = []
用於編譯的相依項目標頭。
name 必填
這個屬性用於命名這個方法建立的動作輸出構件。另請參閱 `main_output` 引數。
disallow_pic_outputs default = False
PIC 輸出內容是否應建立。
disallow_nopic_outputs default = False
NOPIC 輸出內容是否應建立。
additional_inputs default = []
編譯來源檔案所需的其他檔案清單
grep_includes File; or None; default = None

configure_features

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

建立 feature_configuration 例項。需要 cpp 設定片段。

參數

參數 說明
ctx ctx; or None; 預設值 = None
規則內容。
cc_toolchain 需要
cc_toolchain,我們會為其設定功能。
language string; or None; 預設值 = None
要設定的語言:c++ 或 objc (預設為 c++)
requested_features default = []
要啟用的功能清單。
unsupported_features default = []
目前規則不支援的功能清單。

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 default = []

包含單一功能的所有旗標規格。

引數:

name:功能名稱。您可以在工具鍊中新增「feature」專區,並在 BUILD 檔案中新增對應的字串做為功能,藉此引入功能,而無須變更 Bazel。

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

flag_sets:FlagSet 清單 - 如果已啟用指定功能,系統會為指定的動作套用標記集。

env_sets:EnvSet 清單:如果啟用指定功能,系統會將 env 集合套用至指定的動作。

要求:功能集清單,定義工具鍊支援這項功能的時間。只要任何功能組合完全套用 (也就是啟用功能組合的所有功能),系統就會支援這項功能。如果省略「requires」(需要),則系統會不論其他功能是否已啟用,皆支援這項功能。例如,您可以根據啟用的建構模式 (opt / fastbuild / dbg) 篩選標記。

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

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

如果下列情況成立,就無法啟用功能:
- 'provides' 包含我們要啟用的其他功能或動作設定的名稱。
- 'provides' 包含與我們要啟用的其他功能或動作設定中的 'provides' 相同的值。使用此方法可確保不相容的功能不會同時意外啟用,導致難以診斷的編譯器錯誤。
action_configs default = []

動作設定會對應至 Bazel 動作,並可根據已啟用的功能選取工具。動作設定檔的啟用方式與功能相同:功能可以以與其他功能相同的方式「要求」或「暗示」動作設定檔。

引數:

action_name:這個設定適用的 Bazel 動作名稱,例如「c-compile」或「c-module-compile」。

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

tools:套用至動作的工具會是第一個功能集與功能設定相符的工具。如果沒有任何工具符合所提供的功能設定,系統就會擲回錯誤。因此,建議您提供內含空白功能集的預設工具。

flag_sets:如果啟用指定的動作設定,系統會將旗標組套用至對應的動作。

implies:在啟用此動作設定時,自動啟用的功能或動作設定清單。如果無法啟用任何隱含的功能或動作設定,系統也會 (靜默) 停用這項動作設定。

artifact_name_patterns default = []

動作輸入或輸出的特定類別構件名稱。

引數:

category_name:此選項適用的構件類別。這個欄位會與 Bazel 中定義的類別清單進行比對。例如「linked_output」或所選項目的構件。與擴充功能搭配使用時,可用來根據目標名稱建立構件名稱。

extension:建立此所選項目的構件所用的擴充功能。與前置字串搭配使用時,可用來根據目標名稱建立構件名稱。

cxx_builtin_include_directories default = []

內建的 C++ 編譯內含目錄。這些應為編譯器使用的確切路徑,通常會相對於執行根目錄。

您可以使用 'gcc -E -xc++ - -v' 判斷編譯器使用的路徑。

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

系統會根據設定檔目錄解析相對路徑。

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

toolchain_identifier 必填

crosstool 版本中工具鍊的專屬 ID。這個名稱必須能夠用於路徑中的目錄名稱。

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

host_system_name string; or None; default = None
已忽略。
target_system_name 必填
GNU 系統名稱。
target_cpu required
目標架構字串。
target_libc 必要
libc 版本字串 (例如「glibc-2.2.2」)。
compiler 必要
編譯器版本字串 (例如「gcc-4.1.1」)。
abi_version string; or None; default = None
使用的 ABI,即 GCC 版本。例如:「gcc-3.4」
abi_libc_version string; or None; default = None
ABI 使用的 glibc 版本。
tool_paths default = []

工具位置。

引數:

name:工具名稱。

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

make_variables default = []
規則可存取的 make 變數。
builtin_sysroot string; or None; 預設值 = None
內建的 sysroot。如果沒有這個屬性,Bazel 就無法使用不同的 sysroot,也就是透過 --grte_top 選項。
cc_target_os string; or 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 default = unbound
編譯這個目標所需的標頭集
system_includes default = unbound
以尖括號參照的標頭檔案搜尋路徑集,例如 #include <foo/bar/header.h>。這些路徑可以是相對於執行根目錄或絕對路徑。通常會搭配 -isystem 傳遞
includes default = unbound
以尖括號和引號同時參照的標頭檔案搜尋路徑集。通常會透過 -I 傳遞
quote_includes default = unbound
以引號參照的標頭檔案搜尋路徑集,例如 #include "foo/bar/header.h"。可以是相對於執行根目錄的相對路徑,也可以是絕對路徑。通常會搭配 -iquote 使用
framework_includes default = unbound
(僅限 Apple 平台) 的標頭檔案架構搜尋路徑集
defines default = unbound
編譯此目標所需的定義集。每個定義都是字串。會遞迴傳播至依附元件。
local_defines default = unbound
編譯此目標所需的定義集。每個定義都是字串。不會以遞迴方式傳播至依附元件。

create_compilation_outputs

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

建立編譯輸出物件。

參數

參數 說明
objects depset; or None; default = None
物件檔案清單。
pic_objects depset; or 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 default = None
Optional source file for the compilation. 請盡量在此處傳遞 source_file,而不要將其附加至從 cc_common.get_memory_inefficient_command_line 產生的指令列結尾,因為這樣一來,工具鍊作者就能正確指定及定位編譯器標記。
output_file default = None
Optional output file of the compilation. 請盡量在此處傳遞 output_file,而不要將其附加至從 cc_common.get_memory_inefficient_command_line 產生的指令列結尾,因為這樣一來,工具鍊作者就能正確指定及放置編譯器標記。
user_compile_flags sequence of strings; or None; 預設值 = None
額外編譯旗標 (copts) 清單。
include_directories depset; or None; default = None
include 目錄的 Depset。
quote_include_directories depset; or None; 預設值 = None
Depset 的引言包含目錄。
system_include_directories depset; or None; default = None
Depset 的系統包含目錄。
framework_include_directories depset; or None; default = None
Depset 的架構包含目錄。
preprocessor_defines depset; or None; default = None
Depset 的前置處理器定義。
thinlto_index string; or None; default = None
LTO 索引檔案路徑。
thinlto_input_bitcode_file string; or None; 預設值 = None
輸入至 LTO 後端的位元碼檔案。
thinlto_output_object_file string; or None; default = None
由 LTO 後端輸出的物件檔案。
use_pic default = False
如果設為 true,編譯作業會產生位置無關的程式碼。
add_legacy_cxx_options default = False
未使用。
variables_extension dict; 預設值 = 未繫結
Dictionary 是編譯動作使用的額外變數。

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 default = None
feature_configuration 要查詢。
cc_toolchain default = None
要使用的 CcToolchainInfo 供應器。
static_library File; or None; 預設值 = None
要連結的靜態資料庫的 File
pic_static_library File; or None; 預設值 = None
要連結的 pic 靜態資料庫的 File
dynamic_library File; or None; 預設值 = None
要連結的動態程式庫的 File。一律用於執行階段,如果未傳遞 interface_library,則用於連結。
interface_library File; or None; 預設值 = None
要連結的介面資料庫的 File
pic_objects sequence of Files; 預設值 = 未綁定
(實驗功能,請勿使用)
objects sequence of Files; 預設值 = 未綁定
(實驗功能,請勿使用)
default = False
是否要在 --whole_archive 區塊中連結靜態資料庫/物件。
string; default = ''
覆寫 solib 目錄中動態程式庫連結的預設路徑。空字串可使用預設值。
default = ''
覆寫 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; or depset; default = None
Depset 的目錄,連結器會在連結時尋找程式庫。
None; or depset; 預設值 = None
Depset 的目錄,載入器會在執行階段尋找程式庫。
None; or sequence; 預設值 = None
其他連結旗標 (linkopts) 的清單。
default = None
選用的輸出檔案路徑。
default = None
選用參數檔案路徑。
default = None
(選用) .def 檔案路徑。
default = True
如果使用連結器,則為 True;如果使用封存器,則為 False。呼叫端負責讓這項資訊與所使用的動作名稱保持同步 (is_using_linker = True 表示連結可執行檔或動態程式庫,is_using_linker = False 表示封存靜態程式庫)。
default = False
如果建立動態程式庫,則為 True;如果是可執行或靜態程式庫,則為 False。呼叫端負責讓這項資訊與所使用的動作名稱保持同步。在 b/65151735 修正後,這個欄位就會移除。
default = True
如果設為 True,bazel 就會公開「strip_debug_symbols」變數,通常用於使用連結器從輸出檔案中移除偵錯符號。
default = False
如果設為 true,系統會設定「is_cc_test」變數。
default = True
未使用。

create_linker_input

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

建立 LinkerInput

參數

參數 說明
owner required
產生此輸入內容中所有檔案的目標標籤。
libraries None; or depset; default = None
List of LibraryToLink.
None; or depset of strings; or sequence of strings; 預設值 = None
UserLink 標記以字串形式傳遞。接受 [String]、[[String]] 或 depset(String)。我們不建議使用後者,因為它只會保留用於相容性,depset 會被扁平化。如果您想透過未扁平化的 depsets() 傳播 user_link_flags,請將這些項目包裝在 LinkerInput 中,這樣系統就不會在最後扁平化這些項目。
additional_inputs None; or depset; default = None
linking action 的其他輸入內容,例如連結指令碼。

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; or depset; 預設值 = None
Depset 的 LinkerInput
None; or sequence; 預設值 = None
已淘汰。這個參數已淘汰,並將在近期內移除。請勿依賴這項功能。--+incompatible_require_linker_input_cc_api停用。使用這個標記,確認您的程式碼與即將移除的標記相容。
LibraryToLink 清單。
None; or sequence; 預設值 = None
已淘汰。這個參數已淘汰,並將在近期內移除。請勿依賴這項功能。--+incompatible_require_linker_input_cc_api停用。使用這個標記,確認您的程式碼與即將移除的標記相容。
以字串形式傳遞的使用者連結標記清單。
additional_inputs None; or 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, grep_includes=None)

應用於建立可向下游傳播資訊的程式庫規則,以便日後由執行轉移連結的頂層規則連結,建立可執行或動態程式庫。傳回 (CcLinkingContext, CcLinkingOutputs) 的元組。

參數

參數 說明
actions 必須的
actions 物件。
feature_configuration
feature_configuration 進行查詢。
cc_toolchain
CcToolchainInfo 供應器。
compilation_outputs 必要
包含要連結的物件檔案的編譯輸出內容。
default = []
Additional list of linking options.
linking_contexts default = []
Library from dependencies. 這些程式庫會連結至 link() 呼叫的輸出成品,無論是二進位檔或程式庫。
name 必填
用於命名這個方法建立的動作輸出構件。
language default = 'c++'
現在僅支援 C++。請勿使用這項參數。
default = False
是否應一律連結此程式庫。
additional_inputs default = []
linking 動作的其他輸入內容,例如連結指令碼。
disallow_static_libraries default = False
Whether to create static libraries.
disallow_dynamic_library default = False
是否應建立動態程式庫。
grep_includes File; or None; default = None

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 required
建立用於範本展開的變數。

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)

如果在功能設定中啟用指定功能,則傳回「是」。

參數

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

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=[], grep_includes=None, additional_outputs=unbound)

應用於 C++ 的推移連結。

參數

參數 說明
actions 必須的
actions 物件。
feature_configuration
feature_configuration 進行查詢。
cc_toolchain
CcToolchainInfo 供應器。
compilation_outputs CcCompilationOutputs; or None; default = None
包含要連結的物件檔案的編譯輸出內容。
default = []
Additional list of linker options.
linking_contexts default = []
將依附元件的連結內容連結至此規則產生的連結內容。
name 必填
這個屬性用於命名這個方法建立的動作輸出構件。
language default = 'c++'
現在僅支援 C++。請勿使用這項參數。
output_type default = 'executable'
可以是 'executable' 或 'dynamic_library'。
default = True
True 會靜態連結依附元件,False 會動態連結。
stamp default = 0
如果 output_type 為「executable」,是否要在已連結的執行檔中加入建構資訊。如果為 1,系統一律會加入建構資訊。如果為 0,系統一律會排除預設的建構資訊。如果為 -1,則會使用預設行為,但可能會遭到 --[no]stamp 標記覆寫。產生可執行的測試規則輸出內容時,應取消設定 (或設為 0)。
additional_inputs sequence; or depset; default = []
linking 動作的其他輸入內容,例如連結指令碼。
grep_includes File; or None; default = None
additional_outputs sequence; 預設值 = 未綁定
(針對連結動作的其他輸出內容,例如地圖檔案)

merge_cc_infos

CcInfo cc_common.merge_cc_infos(direct_cc_infos=[], cc_infos=[])

將多個 CcInfo 合併為一個。

參數

參數 說明
direct_cc_infos default = []
要合併的 CcInfo 清單,其標頭會由傳回供應器中的直接欄位匯出。
cc_infos default = []
要合併的 CcInfo 清單,其標頭不會由傳回提供者的直接欄位匯出。

merge_compilation_contexts

CompilationContext cc_common.merge_compilation_contexts(compilation_contexts=[])

將多個 CompilationContexts 合併為一個。

參數

參數 說明
compilation_contexts default = []
要合併的 CompilationContexts 清單。每個結構定義的標頭都會由傳回的提供者中的直接欄位匯出。

merge_compilation_outputs

CcCompilationOutputs cc_common.merge_compilation_outputs(compilation_outputs=[])

合併編譯輸出內容。

參數

參數 說明
compilation_outputs default = []