2017-04-03 67 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"}, 
) 

你應該能夠在這個選擇。