需求背景:
1.我们知道可以通过定义config_setting和select的方式 ,增加控制流,但是只能对现有(objc_library,swift_library等)的原有属性增加选择
2.如果想增加一个原来没有的参数控制编译过程怎么办?只能魔改官方rules, 增加属性,通过属性的值来判断
3.比如增加一个针对资源图片的 warning_as_error, 就需要新增一个属性来控制后续的编译过程
4.有没有更高效的方式???
feature 功能 , 我们可以通过魔改官方的rules来实现
官方的示例:
https://github.com/bazelbuild/examples/blob/master/rules/features/rule.bzl
https://github.com/bazelbuild/examples/blob/master/rules/features/BUILD
1.官方给出的使用方式是在BUILD rules声明中,直接给出feature的内容
2.还可以在.bazelrc中 build --features=resource_warning_as_error
3.这样在rules实现中, 就可以通过ctx.features拿到features数组 , 在数组中判断是否存在我们在外部添加的feature
例:
.bazelrc
build --features=resource_warning_as_error
resources.bzl
自己定义了个参数resource_war_as_err ,通过判断是否在ctx.features中存在字符串"resource_war_as_err" 来赋值Fales或者True
processing_args = {
"actions": actions,
"bundle_id": bundle_id,
"executables": rule_executables,
"files": files,
"parent_dir": parent_dir,
"platform_prerequisites": platform_prerequisites,
"product_type": rule_descriptor.product_type,
"rule_label": rule_label,
"resource_war_as_err":"resource_warning_as_error" in ctx.features,
}
网友评论