cc_common

报告问题 查看源代码

用于 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++ 工具链相关信息)的密钥

configure_features

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

创建一个 feature_configuration 实例。需要 cpp 配置 fragment。

参数

参数 说明
ctx ctx;或 None;默认值为 None
规则上下文。
cc_toolchain required
我们为其配置功能的 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 required
规则上下文。
features 默认值为 []
包含一项功能的所有标志规范。

参数:

name:地图项的名称。通过向工具链添加“feature”部分,并将相应的字符串作为功能添加到 BUILD 文件中,可以在不对 Bazel 做出更改的情况下引入功能。

enabled:如果为“True”,则此功能处于启用状态,除非规则类型明确将其标记为不受支持。

flag_sets:FlagSet 列表。如果启用了给定功能,则标记集将应用于为其指定的操作。

env_sets:一个 EnvSet 列表。如果启用了给定功能,系统会将这些环境变量应用于为其指定的操作。

requires:定义工具链何时支持此功能的功能集列表。如果任何功能集完全适用(即启用了某个功能集的所有功能),则该功能受支持。如果省略 requires,则系统会支持该功能,与启用哪些其他功能无关。例如,使用此方法根据启用的构建模式 (opt / 快速 build / dbg) 过滤标志。

implies:启用此功能后会自动启用的功能或操作配置的字符串列表。如果任何隐含功能或操作配置无法启用,则此功能也将(静默)无法启用。

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++ 编译的内置 include 目录。这些路径应该是编译器使用的确切路径,并且通常相对于 exec 根。

编译器使用的路径可以由“gcc -E -xc++ - -v”确定。

我们目前还使用 C++ 路径进行 C 编译,只要 C++ 和 C 头文件之间没有名称冲突,这种做法是安全的。

相对路径是相对于配置文件目录进行解析的。

如果编译器支持 --sysroot,则这些路径应使用 %sysroot% 而不是 include 路径,并指定 sysroot 属性,以便为 blaze 提供执行正确替换所需的信息。

toolchain_identifier 必需

交叉工具版本中工具链的唯一标识符。必须能够将其用作路径中的目录名。

它必须与以下正则表达式匹配:[a-zA-Z_][\.\- \w]*

host_system_name string;或 None;默认值为 None
忽略。
target_system_name required
GNU 系统名称。
target_cpu required
目标架构字符串。
target_libc required
libc 版本字符串(例如“glibc-2.2.2”)。
compiler required
编译器版本字符串(例如“gcc-4.1.1”)。
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 默认为 []
可供规则访问的 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
pic 对象文件的列表。

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 required
cc_toolchain 我们将为其创建编译变量。
feature_configuration 必需
要查询的功能配置。
source_file 默认值为 None
编译的可选源文件。建议您在此处传递 source_file,而不是将其附加到从 cc_common.get_memory_inefficient_command_line 生成的命令行的末尾,因为工具链作者会据此正确指定和定位编译器标记。
output_file 默认值为 None
编译的可选输出文件。请在此处传递 output_file,而不是将其附加到从 cc_common.get_memory_inefficient_command_line 生成的命令行的末尾,因为工具链作者会据此正确指定和定位编译器标记。
user_compile_flags string 的序列;或 None;默认值为 None
其他编译标记 (copts) 的列表。
include_directories depset;或 None;默认值为 None
表示 include 目录的设置。
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 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, 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)

返回用于关联操作的链接变量。

参数

参数 说明
required
cc_toolchain 我们将为其创建编译变量。
必需
要查询的功能配置。
None;或 depset;默认值为 None
表示链接器在链接时在其中查找库的目录。
None;或 depset;默认值为 None
表示加载程序将在运行时查找库的目录。
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 required
生成此输入中使用的所有文件的目标的标签。
libraries None;或 depset;默认值为 None
LibraryToLink 的列表。
None;或 depsetstring;或 sequencestring;默认值为 None
作为字符串传递的用户链接标志。接受 [String]、[[String]] 或 depset(String)。不建议采用后一种方法,因为它只是出于兼容性目的而保留,其设置是扁平化的。如果您想通过不扁平的 depsets() 传播 user_link_flag,请将它们封装在 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 required
包含要链接的对象文件的编译输出。
默认值为 []
其他关联选项列表。
linking_contexts 默认值为 []
依赖项中的库。这些库会关联到 link() 调用的输出工件中,无论是二进制文件还是库。
name required
此属性用于为此方法创建的操作的输出工件命名。
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 required
此属性用于为此方法创建的操作的输出工件命名。
language 默认值为 'c++'
目前仅支持 C++。请勿使用此参数。
output_type 默认值为 'executable'
可以是“executable”或“dynamic_library”。
默认值为 True
若为 True,则以静态方式关联依赖项;若为 False,则以动态方式关联。
stamp 默认值为 0
是否在关联的可执行文件中包含 build 信息(如果 output_type 为“executable”)。如果为 1,则始终包含 build 信息。如果为 0(始终排除默认 build 信息,如果为 -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 默认值为 []