如何在 Bazel 中创建和使用自定义构建标志?
How to create and use custom build flags in Bazel?
我有一个带有条件属性的规则:
some_rule(
name = "my_rule",
some_attr = select({
":ts_diagnostics_mode_extended": ["--extendedDiagnostics"]
}),
)
以及配置设置:
config_setting(
name = "ts_diagnostics_mode_extended",
values = { "define": "ts_diagnostics_mode=extended_diagnostics" }
)
但是,当使用 bazel build :my_target --define ts_diagnostics_mode=extended_diagnostics
构建时,我得到
Configurable attribute "some_attr" doesn't match this configuration (would a default condition help?).
缺少什么?
--define
标志由 config_setting
通过 define_values
特别处理,因为它们是多值的。我认为这会起作用:
config_setting(
name = "ts_diagnostics_mode_extended",
define_values = { "ts_diagnostics_mode": "extended_diagnostics" }
)
虽然 define_values
确实有效,但您使用 values
的原始示例也应该有效。 define_values
仅当您希望 config_setting
有多个条目时才需要。
请参阅 define_values 文档中的这一行:
--define
can still appear in values
with normal flag syntax, and can be mixed freely with this attribute as long as dictionary keys remain distinct.
我有一个带有条件属性的规则:
some_rule(
name = "my_rule",
some_attr = select({
":ts_diagnostics_mode_extended": ["--extendedDiagnostics"]
}),
)
以及配置设置:
config_setting(
name = "ts_diagnostics_mode_extended",
values = { "define": "ts_diagnostics_mode=extended_diagnostics" }
)
但是,当使用 bazel build :my_target --define ts_diagnostics_mode=extended_diagnostics
构建时,我得到
Configurable attribute "some_attr" doesn't match this configuration (would a default condition help?).
缺少什么?
--define
标志由 config_setting
通过 define_values
特别处理,因为它们是多值的。我认为这会起作用:
config_setting(
name = "ts_diagnostics_mode_extended",
define_values = { "ts_diagnostics_mode": "extended_diagnostics" }
)
虽然 define_values
确实有效,但您使用 values
的原始示例也应该有效。 define_values
仅当您希望 config_setting
有多个条目时才需要。
请参阅 define_values 文档中的这一行:
--define
can still appear invalues
with normal flag syntax, and can be mixed freely with this attribute as long as dictionary keys remain distinct.