副本

用於 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++ 工具鍊的相關資訊

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 = []
編譯 srcs 所需的標頭清單,並可透過相依規則以遞移方式加入。
private_hdrs default = []
編譯 srcs 所需的標頭清單,但「不」依附於相依規則。
includes 預設 = []
以角括號和引號參照的標頭檔案搜尋路徑。通常會搭配 -I. 以遞移方式傳播至相依項目。
quote_includes default = []
以引號參照的標頭檔案搜尋路徑,例如 #include "foo/bar/header.h"。也可以是相對於執行根或絕對的。通常會透過「-iquote」傳遞。以遞移方式傳播至相依項目。
system_includes default = []
角括號參照的標頭檔案搜尋路徑,例如 #include <foo/bar/header.h>。這些路徑可以是相對於執行根或絕對的。通常會使用 -isystem 傳遞。以遞移方式傳播至相依項目。
framework_includes 預設 = []
Apple 架構標頭檔案的搜尋路徑。也可以是相對於執行根或絕對的。通常以 -F 表示。以遞移方式傳播至相依項目。
defines default = []
編譯這個目標所需的定義組合。每個定義都是一個字串。以遞移方式傳播至相依項目。
local_defines default = []
編譯這個目標所需的定義組合。每個定義都是一個字串。不會以遞移方式套用至依附元件。
include_prefix default = '
要新增至這項規則標頭路徑的前置字串。設定後,即可透過此屬性在存放區相關路徑前面的值存取這項規則的標頭屬性。系統會先移除 bar_include_prefix 屬性中的前置字元,然後再新增這個前置字元。
strip_include_prefix default = '
要從這項規則標頭路徑中移除的前置字串。設定後,使用者即可透過這個標頭截斷的路徑存取這項規則的標頭。如果為相對路徑,則會以套件相關路徑的方式提供。如果是絕對值,系統會視為存放區相關路徑。移除這個前置字串後,系統會新增 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 = []
編譯 srcs 所需的其他檔案清單
grep_includes File; or 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; default = None
規則內容。
cc_toolchain 必要
cc_toolchain,用於設定特徵。
language string; or None; default = 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 預設 = []

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

引數:

name:功能名稱。您可以將「feature」區段新增至工具鍊,並在 BUILD 檔案中新增對應的字串,這樣就能導入無需變更 Bazel 的功能。

enabled:如果設為「True」,系統會啟用此功能,除非有特定規則類型明確標示為不受支援。

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

env_sets:EnvSet 清單 - 如果指定功能已啟用,系統就會針對指定的動作套用環境集。

要求: 定義工具鍊支援此功能時機的功能集。只要有任何功能集完全套用,也就是啟用某個功能組合的所有功能,即可支援這個功能。如果省略「必要」,系統會單獨支援該功能 (無論是否啟用其他功能)。以下範例使用範例,根據已啟用的建構模式篩選標記 (opt / Fastbuild / dbg)。

暗示:功能或動作設定的字串清單,列出啟用此功能時自動啟用的功能或動作設定。如果任何隱含功能或動作設定無法啟用,系統就不會啟用這項功能。

提供:與此功能衝突的名稱清單。

下列情況無法啟用功能:
-「provides」包含要啟用的其他功能或動作設定名稱。
-「provides」包含的值與我們想啟用的功能或動作設定中的「提供」相同。這麼做可確保無法同時意外啟用不相容的功能,導致難以診斷編譯器錯誤。
action_configs 預設 = []

動作設定會對應至 Bazel 動作,並允許根據已啟用的功能選取工具。動作設定啟用作業是由與功能相同的語意執行:功能可以「需要」或「暗示」動作設定,與處理其他功能的方式相同。

引數:

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

enabled:如果設為「True」,系統就會啟用這項操作,除非有特定規則類型明確標示為不支援。

工具:套用至動作的工具將成為第一個工具,其中包含與功能設定相符的功能集。如果沒有任何工具符合所提供的功能設定,就會發生錯誤。因此,建議您提供一個空白功能集的預設工具。

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

暗示:在啟用這項動作設定時自動啟用的功能或動作設定清單。如果任何隱含功能或動作設定無法啟用,系統就不會 (無聲) 啟用這項動作設定。

artifact_name_patterns 預設 = []

適用於動作的指定輸入類別或輸出成果構件名稱。

引數:

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

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

cxx_builtin_include_directories 預設 = []

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

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

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

相關路徑是根據設定檔目錄進行解析。

如果編譯器提供 --sysroot 支援,這些路徑應使用 %sysroot% 而不是 include 路徑,並指定 sysroot 屬性,盡全力提供正確取代方法所需的資訊。

toolchain_identifier 必填

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

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

host_system_name string; or None; 預設值 = 無
忽略。
target_system_name 必填
GNU 系統名稱。
target_cpu 必要
目標架構字串。
target_libc 必要
libc 版本字串 (例如「glibc-2.2.2」)。
compiler 必要
編譯器版本字串 (例如「gcc-4.1.1」)。
abi_version string; or None; default = None
使用中的 abi,也就是 gcc 版本。E.g.: 「gcc-3.4」
abi_libc_version string; or None; default = None
我們使用的 Abi 使用的 glibc 版本。
tool_paths 預設 = []

工具位置。

引數:

name:工具名稱

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

make_variables default = []
讓規則存取的變數。
builtin_sysroot string; or None; default = None
內建 sysroot。如果沒有這項屬性,Bazel 不允許使用其他 sysroot,即透過 --grte_top 選項。
cc_target_os string; or 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; default = 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
編譯的選用來源檔案。建議您將 source_file 傳遞至此處,而不要將其附加至 cc_common.get_memory_in 有效_command_line 產生的指令列結尾,因為工具鍊作者可發揮工具鍊的強大能力,正確指定及定位編譯器旗標。
output_file default = None
編譯的選用輸出檔案。建議您在此傳送 output_file 檔案,而非將其附加至 cc_common.get_memory_in 有效_command_line 產生的指令列結尾,因為工具鍊作者可發揮工具鍊的強大能力,正確指定及定位編譯器旗標。
user_compile_flags sequence of strings; or None; default = None
其他編譯旗標清單 (copt)。
include_directories depset; or None; default = None
包含目錄的限制。
quote_include_directories depset; or None; default = None
引用內容限制包含目錄。
system_include_directories depset; or None; default = None
系統依附元件包含目錄。
framework_include_directories depset; or None; default = None
架構依據包含目錄。
preprocessor_defines depset; or None; default = None
定義預先處理工具解碼器。
thinlto_index string; or None; default = None
LTO 索引檔案路徑。
thinlto_input_bitcode_file string; or None; default = 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; default = 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 default = None
要查詢的 feature_configuration
cc_toolchain default = None
要使用的 CcToolchainInfo 提供者。
static_library File; or None;預設值 = 無
要連結的靜態資料庫 File 個。
pic_static_library File; or None;預設值 = 無
要連結的圖片靜態資料庫 File 個。
dynamic_library File; or None;預設值 = 無
要連結的動態資料庫 File 個。一律用於執行階段,如未傳遞 interface_library,就會用於連結。
interface_library File; or None; default = None
要連結介面程式庫的 File
pic_objects sequence of Files; default = unbound
實驗功能,請勿使用
objects sequence of Files; default = unbound
實驗功能,請勿使用
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
預設目錄,連結器會在連結時搜尋程式庫。
None; or depset; default = None
載入器會在執行階段尋找程式庫的目錄。
None; or sequence; default = 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 必要
產生這項輸入內容中使用所有檔案的目標標籤。
libraries None; or depset;預設值 = 無
清單為 LibraryToLink
None; or depset of strings; or sequence of strings; default = None
以字串形式傳送的使用者連結標記。可接受 [String]、[[String]] 或 depset(String)。不建議採用後者,因為前者僅為了相容性而保留,已壓平底座。如果您想透過未整併的 depsets() 傳播 user_link_flags,請將這些參數包裝在 LinkerInput 中,以免在最後為止。
additional_inputs None; or depset; 預設值 = 無
針對連結動作的輸入內容,例如連結指令碼。

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;預設值 = 無
除數為 LinkerInput
None; or sequence; default = None
已淘汰。此參數已淘汰,即將移除。請勿完全仰賴它。--+incompatible_require_linker_input_cc_api停用這項功能。使用此旗標確認您的程式碼是否與即將移除的程式碼相容。
LibraryToLink 的清單。
None; or sequence; default = None
已淘汰。此參數已淘汰,即將移除。請勿完全仰賴它。--+incompatible_require_linker_input_cc_api停用這項功能。使用此旗標確認您的程式碼是否與即將移除的程式碼相容。
以字串形式傳遞的使用者連結旗標清單。
additional_inputs None; or sequence; default = 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 必要
包含要連結物件檔案的編譯輸出。
預設 = []
其他連結選項清單。
linking_contexts default = []
來自依附元件的程式庫。這些程式庫會連結至 link() 呼叫的輸出成果,可以是二進位檔或程式庫。
name 項必要
這是為此方法建立的動作輸出構件命名。
language default = 'c++'
目前僅支援 C++。請勿使用這個參數。
default = False
是否應一律連結這個程式庫。
additional_inputs default = []
針對連結動作的其他輸入內容,例如連結指令碼。
disallow_static_libraries default = False
是否應建立靜態資料庫。
disallow_dynamic_library default = False
是否應建立動態程式庫。
grep_includes File; or 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 必要
用於展開範本的建構變數。

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

應用於 C++ 遞移連結。

參數

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

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 預設 = []