Bazel 如何检测a";中的Xcode版本;选择";与巴泽尔

Bazel 如何检测a";中的Xcode版本;选择";与巴泽尔,bazel,Bazel,有没有办法在select或一些等效的动态机制中使用Xcode版本值 这样做的动机是,我们必须在管道和开发人员桌面上支持Xcode的多个修订版。当使用相同的构建基础结构支持多个Xcode修订时,最好以编程方式修改用于CFLAGS的命令行参数,例如指定不同的优化、调试和警告标志。例如,我们只想为Xcode 8.3或更高版本指定某些标志 我看到有xcode\u工具链和xcode\u版本的配置片段,但我不相信我可以选择这些。我们不希望通过命令行配置规范或动态生成BUILD文件(如果可能的话)告诉baze

有没有办法在
select
或一些等效的动态机制中使用Xcode版本值

这样做的动机是,我们必须在管道和开发人员桌面上支持Xcode的多个修订版。当使用相同的构建基础结构支持多个Xcode修订时,最好以编程方式修改用于CFLAGS的命令行参数,例如指定不同的优化、调试和警告标志。例如,我们只想为Xcode 8.3或更高版本指定某些标志

我看到有
xcode\u工具链
xcode\u版本
的配置片段,但我不相信我可以选择这些。我们不希望通过命令行配置规范或动态生成
BUILD
文件(如果可能的话)告诉bazel它正在使用哪个Xcode版本(为了CFLAGS的目的),特别是因为bazel应该已经知道它正在使用哪个版本


对于这种情况,有更好的推荐方法吗?

您可以使用存储库来执行本地自动检测,方法与此类似。生成的带有的CROSSTOOL可以精确地为当前主机烘焙,并且构建文件中不需要选择。如果需要为规则子集显示特定的命令行标志,可以使用“功能”。可以根据每个规则启用/禁用功能:

cc_library(
  name = "foo",
  features = [ "foo_flags", "-bar_flags" ]
)
你可能会觉得有用。要获得更多关于如何编写特性和动作配置的示例,请查看

我看到有
xcode\u工具链
xcode\u版本
的配置片段,但我不相信我可以选择这些

对于后者,您遇到了什么问题

如果使用xcode_版本指定配置设置,例如:

config_setting(
  name = "xcode_7_1" + vers,
  values = {"xcode_version": "7.1"},
)
您应该能够选择此选项