如何使用Bazel

时间:2017-04-03 17:30:40

标签: bazel

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

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

我看到xcode_toolchainxcode_version有配置片段,但我不相信我可以选择那些。我们不希望告诉bazel它正在使用哪个Xcode版本(出于CFLAGS的目的)或者使用命令行配置规范,或者通过动态生成BUILD文件,特别是因为Bazel应该已经知道它是哪个版本使用

这种情况是否有更好的推荐方法?

2 个答案:

答案 0 :(得分:1)

  

我看到xcode_toolchainxcode_version有配置片段,但我不相信我可以选择那些。

你遇到了什么问题?

如果使用xcode_version指定配置设置,例如:

config_setting(
  name = "xcode_7_1" + vers,
  values = {"xcode_version": "7.1"},
)

你应该可以选择这个。

答案 1 :(得分:0)

您可以使用存储库进行本地自动检测,类似于bazel autodetects c++ toolchain。生成的CROSSTOOL可以为当前主机精确烘焙,而BUILD文件中不需要选择。如果您需要为规则子集显示特定的命令行标志,则可以使用“功能”。可以基于每个规则启用/禁用功能:

cc_library(
  name = "foo",
  features = [ "foo_flags", "-bar_flags" ]
)

您可能会发现about the CROSSTOOL wiki page有帮助。要获得有关如何编写功能和action_configs的更多示例,请查看CppActionConfigs.java