如何在Bazel中创建和使用自定义构建标志?

如何在Bazel中创建和使用自定义构建标志?,bazel,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_mo

我有一个带有条件属性的规则:

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构建时:我的目标--define ts\u diagnostics\u mode=extended\u diagnostics
I get
可配置属性“some\u attr”与此配置不匹配(默认条件是否有帮助?。

缺少什么?

--define
标志由
config\u setting
通过专门处理,因为它们是多值的。我认为这会奏效:

config_setting(
    name = "ts_diagnostics_mode_extended",
    define_values = { "ts_diagnostics_mode": "extended_diagnostics" }
)

虽然
define_values
确实有效,但是您的带有
values
的原始示例也应该有效<只有当您希望
config\u设置
包含多个条目时,才需要使用code>define\u values

请参见文档中的这一行:

--define
仍然可以使用正常的标志语法出现在
值中,并且只要字典键保持不同,就可以与此属性自由混合


你说得对。当使用原始示例再次测试时,它仅在包含默认条件时起作用,
//conditions:default
。使用
定义_值时也是如此。但是,在设置配置中包含默认条件以使其工作似乎有点奇怪。