2017-07-19 122 views
2

我正在嘗試使用bazel構建C++應用程序。它應該可以在macos和linux上運行。現在的問題是,在馬科斯它需要通過"-framework OpenGL", "-framework GLUT"鏈接器標誌,而在Linux上,我應該做的像 cc_library( name = "glut", srcs = glob(["local/lib/libglut*.dylib", "lib/libglut*.so"]), ... glut.BUILD。 所以問題是 1.如何向cc_library規則提供平臺依賴的鏈接器選項? 2.特別是如何使用bazel以平臺無關的方式鏈接到過剩?bazel中的平臺依賴鏈接器標誌(for glut)

回答

3

您可以使用Bazel select()函數來執行此操作。像這樣的東西可能會奏效:

config_setting(
    name = "linux_x86_64", 
    values = {"cpu": "k8"}, 
    visibility = ["//visibility:public"], 
) 

config_setting(
    name = "darwin_x86_64", 
    values = {"cpu": "darwin_x86_64"}, 
    visibility = ["//visibility:public"], 
) 

cc_library(
    name = "glut", 
    srcs = select({ 
     ":darwin_x86_64": [], 
     ":linux_x86_64": glob(["local/lib/libglut*.dylib", "lib/libglut*.so"]), 
    }), 
    linkopts = select({ 
     ":darwin_x86_64": [ 
      "-framework OpenGL", 
      "-framework GLUT" 
     ], 
     ":linux_x86_64": [], 
    }) 
    ... 
) 

周圍挖在巴澤爾GitHub的倉庫,它有選擇使用一些好的現實世界的例子()。

+0

我必須手動傳遞配置設置嗎?還是有一些系統內省? – Slava

0

我有一個類似的問題,但根據平臺選擇正確的編譯器和@ zlalanne的解決方案不適合我。挫折後2天,我終於找到了以下解決方案:

config_setting (
    name = "darwin", 
    constraint_values = [ "@bazel_tools//platforms:osx" ] 
) 

config_setting (
    name = "windows", 
    constraint_values = [ "@bazel_tools//platforms:windows" ] 

) 

我沒有任何需要linux,但添加了此信息BUILD文件應該工作:

config_setting (
    name = "linux", 
    constraint_values = [ "@bazel_tools//platforms:linux" ] 
) 

使用":darwin"":windows"":linux"在您的select s,你應該有一個解決方案。