Bazel中的Symbol, Rule, Macro, Target, Provider, Aspect 等概念

学习Bazel ,就要学习Bazel 的规则定义, 弄清各个概念是重要的一个步骤。 在 Bazel 规则定义中,SymbolRuleMacro 是常见的概念。除此之外,Bazel 还有 TargetProviderAspect Repository、Package、 Workspace、 Configuration、Build Event Protocol、 Starlark、Transition、Action 等重要概念。

概念 类别 作用
Symbol(符号) 基础概念 Bazel 规则、目标、属性等命名的标识符。
Rule(规则) 规则 定义 Bazel 构建逻辑,如 cc_librarypy_binary
Macro(宏) 代码复用 通过 Starlark 编写的函数,封装多个规则以简化 BUILD 文件。
Target(目标) 构建单元 BUILD 文件中的规则实例,如 cc_library(name = "lib")
Provider(提供者) 数据传递 规则间传递构建信息的方式,如 DefaultInfo(files = depset([...]))
Aspect(切面) 依赖扩展 扩展规则行为,访问依赖的构建信息,如 bazel_aspect()
Repository(仓库) 外部依赖管理 定义和下载外部依赖,如 http_archive()git_repository()
Package(包) 代码组织 BUILD 文件为单位的代码组织单元,每个 BUILD 目录即一个 package。
Workspace(工作区) 项目根目录 WORKSPACE 文件定义的 Bazel 项目,管理外部依赖。
Configuration(构建配置) 编译参数 影响构建方式,如 --cpu=x86_64--compilation_mode=opt
Build Event Protocol(BEP) 日志分析 记录 Bazel 构建事件,生成 JSON 或 Proto 格式日志。
Starlark(Bazel 语言) 语言 Bazel 使用的 Python 语法子集,编写规则、宏和构建逻辑。
Transition(配置转换) 配置管理 允许在不同规则间修改构建配置,如改变 --cpu
Action(构建动作) 执行单元 最小的构建执行单位,如 ctx.actions.run_shell() 运行 shell 命令。

下面将对它们做详细的解释:

1. Symbol(符号)

在 Bazel 中,symbol(符号) 指的是 .bzl 文件中定义的变量、函数、规则、宏等。

当你使用 load() 语句时,你在导入的就是 symbols

示例:

load("@rules_python//python:packaging.bzl", "py_package", "py_wheel")

  • 这里 py_packagepy_wheel 就是 packaging.bzl 文件中定义的 symbols

  • symbols 可以是

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值