学习Bazel ,就要学习Bazel 的规则定义, 弄清各个概念是重要的一个步骤。 在 Bazel 规则定义中,Symbol、Rule 和 Macro 是常见的概念。除此之外,Bazel 还有 Target、Provider、Aspect Repository、Package、 Workspace、 Configuration、Build Event Protocol、 Starlark、Transition、Action 等重要概念。
| 概念 | 类别 | 作用 |
|---|---|---|
| Symbol(符号) | 基础概念 | Bazel 规则、目标、属性等命名的标识符。 |
| Rule(规则) | 规则 | 定义 Bazel 构建逻辑,如 cc_library、py_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_package和py_wheel就是packaging.bzl文件中定义的 symbols。 -
symbols可以是

最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



