上一篇 讲的是修改了xctoolrunner来将Assets打包过程的warnings 转换成Error
这一篇 讲如何在bazel build命令中加入控制项
比如:
bazel build --define warning_as_err=yes //universal:bl_dump_binary
官方提供的例子
config_setting
配合 select
Examples
config_setting(
name = "windows",
values = {
"crosstool_top": "//crosstools/windows",
},
)
cc_binary(
name = "multiplatform_app",
...
linkopts = select({
":windows": [
"-Wl,windows_support1.lib",
"-Wl,windows_support2.lib",
],
"//conditions:default": [],
...
)
bazel build //pkg:multiplatform_app --crosstool_top=//crosstools/windows .
接下来就是在build_bazel_rules_apple中寻找了
思路:
所以 我也想在build_bazel_rules_apple中找到合适的位置, 加入config_setting和 select
但是 失败了,即使加了config_setting 也没有合适的属性可以用于select接受我传递的值
所以 只能想办法增加一个属性进去, 接收传递过来的值 ,用于后面判断是否可以 开启 warning_as_error的功能
在 ios_rule.bzl
ios_application = rule_factory.create_apple_bundling_rule(
implementation = _ios_application_impl,
platform_type = "ios",
product_type = apple_product_type.application,
doc = "Builds and bundles an iOS Application.",
)
并没有设置属性的位置, 尝试添加属性也会直接报错, 但是发现了create_apple_bundling_rule
基本可以得出ios_application的属性构造 是由工厂类,的create_apple_bundling_rule
方法构造
在rule_factory.bzl
中
在下列方法中加入 war_as_err 属性, 用于控制是否开启 warning 转 error
def _get_ios_attrs(rule_descriptor):
attrs.append({
"war_as_err": attr.string(
doc = """
The extension, without a leading dot, that will be used to name the bundle. If this attribute is not
set, then the default extension is determined by the application's product_type111.
""",
),
})
因为我们是给 ios_application添加的属性, 那么在我们的工程的BUILD中就可以直接修改
在BUILD
中
config_setting(
name = "war_as_err_func",
define_values = {
"war_as_err_value": "yes",
},
)
ios_application(
war_as_err = select({
":war_as_err_func" :"war_as_err=yes",
"//conditions:default": "war_as_err=no",
}),
)
网友评论