2017-04-03 66 views
3

有没有办法使用用在select或某些等效动力机制Xcode的版本值的方法吗?如何在“选择”检测版本的Xcode与巴泽尔

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

我看到xcode_toolchainxcode_version的配置片段,但我不相信我可以选择这些配置片段。我们不希望通过命令行配置规范告诉bazel它使用的是哪个Xcode版本(用于CFLAGS),或者如果可能的话动态生成文件,尤其是因为Bazel应该已经知道它使用的是哪个版本。

在这种情况下是否有更好的建议方法?

回答

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

1

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

什么问题,你运行到与后者?

如果指定一个配置与xcode_version设置,例如:

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

你应该能够在这个选择。