bazel---rule规则(持续学习建设中)
rule(规则)内置规则(以c为例子)规则说明cc_library用于构建 C 或 C++ 库的规则。它接受源代码文件、头文件、编译选项等作为输入,并生成静态库或动态库文件作为输出。cc_binary用于构建 C 或 C++ 可执行文件的规则。它接受源代码文件、头文件、依赖库等作为输入,并生成可执行文件作为输出。cc_test用于构建 C 或 C++ 测试的规则。它接受测试源代码文件、头文件、依赖
·
rule
rule就是规则,一般分为bazel系统内置规则和用户自定义规则。
内置规则可在BUILD文件中通过load加载后直接使用。
自定义规则一般在.bzl扩展文件中实现,在BUILD文件同样适用load加载后调用。
内置规则(以c为例子)
规则 | 说明 |
---|---|
cc_library | 用于构建 C 或 C++ 库的规则。它接受源代码文件、头文件、编译选项等作为输入,并生成静态库或动态库文件作为输出。 |
cc_binary | 用于构建 C 或 C++ 可执行文件的规则。它接受源代码文件、头文件、依赖库等作为输入,并生成可执行文件作为输出。 |
cc_test | 用于构建 C 或 C++ 测试的规则。它接受测试源代码文件、头文件、依赖库等作为输入,并生成可执行的测试程序。 |
cc_import | 用于导入外部的 C 或 C++ 库的规则。它用于引入已经存在的库文件或第三方库,以便在项目中使用。 |
filegroup | 用于将一组文件打包为单个逻辑组,并在构建过程中一起处理。 |
exports_files | 用于将指定的文件或目录导出到目标的运行时环境中。 |
genrule | 用于执行任意命令并生成文件作为输出的规则。 |
data | 用于将文件或目录复制到目标的输出目录中,以供其他目标使用。 |
sh_binary | 用于构建和运行Shell脚本的规则。 |
container_image | 用于构建和管理容器镜像的规则。 |
setting_group | 用于将一组构建设置(如编译选项、宏定义、环境变量等)组织在一起,并在构建文件中使用。 |
string_flag | 用于接受命令行标志的字符串值作为输入。然后在构建文件中使用这个标志的值来配置不同的规则、目标或构建操作。 |
自定义规则
使用Starlark语言自定义规则函数,自定义规则一般放入.bzl文件中。
自定义规则分为三步:定义规则函数、注册规则、使用规则
定义规则函数
使用Starlark语言定义规则函数
custom_rules.bzl中
def rule_impl(ctx): # ctx为上下文对象,可以调用上下文中的参数
# 规则函数实现
input_file = ctx.attr.input_file
注册规则
custom_rules.bzl中
my_rule = rule(
implementation = rule_impl,
attrs = {
"input_file": attr.string(),
"output_file": attr.string(),
},
)
使用规则
在BUILD文件中,通过load()函数,加载自定义规则。然后可以直接使用函数调用的方式使用规则。
# ":custom_rules.bzl"为规则文件的标签, my_rule是需要加载的自定义规则
load(":custom_rules.bzl", "my_rule")
# 调用规则
my_rule(
name = "my_rule_target", # 指定调用规则后生成的目标名
input_file= "input.txt", # 自定义参数传递,将值“input.txt”传递给参数input_file
output_file= "output.txt",
)
更多推荐
已为社区贡献1条内容
所有评论(0)