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

时间:2018-09-12 12:01:33

标签: 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?).

缺少什么?

2 个答案:

答案 0 :(得分:2)

--define标志由config_setting通过define_values特别处理,因为它们是多值的。我认为这会起作用:

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

答案 1 :(得分:1)

虽然define_values确实有效,但您最初使用values的示例也应该有效。仅当您希望define_values有多个条目时,才需要config_setting

请参见define_values文档中的以下行:

  

--define仍可以使用常规标志语法显示在values中,并且只要字典键保持不同即可与该属性自由混合。