扩展程序概览
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
<ph type="x-smartling-placeholder">
</ph>
报告问题open_in_new
查看来源open_in_new
敬上
每晚
·
7.3。
·
7.2 条
·
7.1。
·
7.0。
·
6.5 条
本页介绍了如何使用宏扩展 BUILD 语言
和规则
Bazel 扩展程序是以 .bzl
结尾的文件。使用
load 语句,以便从扩展程序导入符号。
在学习更高级的概念之前,请先:
宏和规则
宏是用于对规则进行实例化的函数。它在以下情况中非常有用:
BUILD
文件变得过于重复或过于复杂,因为它允许您重复使用
一些代码。系统会在读取 BUILD
文件后立即对该函数进行求值。更新后
评估 BUILD
文件时,Bazel 几乎没有关于宏的信息:
如果您的宏生成了 genrule
,则 Bazel 的行为方式就像您编写了
genrule
。因此,bazel query
将仅列出生成的 genrule
。
规则比宏更强大。它可以访问 Bazel
并能完全掌控一切。例如,它可能会传递
其他规则的信息
如果您想重复使用简单的逻辑,请从宏入手。如果宏
通常比较好的做法是制定规则。支持新语言
通常是通过规则实现的规则适用于高级用户
用户无需编写任何代码它们只会加载并调用现有
规则。
评估模型
build 由三个阶段组成。
加载阶段。首先,加载并评估所有扩展程序和所有 BUILD
构建所需的文件执行 BUILD
文件只是
实例化规则(每次调用规则时,规则都会添加到图表中)。
这是对宏求值的位置。
分析阶段。系统会执行规则的代码(其 implementation
函数),且操作已实例化。“操作”描述的是
一组输入中的一组输出,例如“在 hello.c 上运行 gcc 并获取
hello.o”。您必须明确列出在生成代码之前
执行实际命令的过程。换句话说,分析阶段
加载阶段生成的图表,并生成操作图。
执行阶段。当操作的至少一个输出是
必填字段。如果文件缺失,或者某个命令无法生成输出,
构建失败在此阶段,系统也会运行测试。
Bazel 使用并行性来读取、解析和评估 .bzl
文件和 BUILD
文件。每个构建最多读取一次文件,评估结果为
可以缓存和重复使用仅对文件的所有依赖项 (load()
) 进行求值
语句)已解决。根据设计,加载 .bzl
文件不会显示任何可见的
它只定义值和函数。
Bazel 力求巧妙:它通过依赖关系分析来了解哪些文件必须
哪些规则必须分析,以及必须执行哪些操作。对于
例如,如果规则生成的操作是当前 build 不需要的操作,
它们就不会执行
创建附加信息
在自行编写扩展程序时,以下两个链接将非常有用。保留
:
更进一步
除了宏和规则之外,您可能还需要编写
方面和仓库规则。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-08-13。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"没有我需要的信息"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"太复杂/步骤太多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"内容需要更新"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻译问题"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/代码问题"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"易于理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"解决了我的问题"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
{"lastModified": "\u6700\u540e\u66f4\u65b0\u65f6\u95f4 (UTC)\uff1a2024-08-13\u3002"}
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2024-08-13。"],[],[]]