我正在嘗試使用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)
2
A
回答
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
我有一個類似的問題,但根據平臺選擇正確的編譯器和@ 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,你應該有一個解決方案。
相關問題
- 1. 鏈接器標誌(linkopts)在Bazel中傳播嗎?
- 2. CMake Fortran編譯器依賴標誌
- 3. C++中平臺依賴狀態mt19937?
- 4. 將鏈接器依賴項嵌入到目標文件中?
- 5. Setuptools平臺特定的依賴項
- 6. 是CKeditor contextmenu平臺的依賴?
- 7. Java依賴於平臺的類繼承
- 8. cmake:boost依賴和visual studio(或任何具有自動鏈接功能的平臺)
- 9. 刪除鏈接器依賴關係
- 10. C++ Factory和鏈接器依賴關係
- 11. openmp在MSVC中的鏈接器標誌
- 12. 鏈接依賴屬性
- 13. 鏈接依賴關係
- 14. 鏈接依賴觀測值
- 15. ZF2鏈接依賴注入
- 16. 在biicode中處理未解決的依賴於平臺的依賴關係
- 17. JNI依賴和跨平臺構建
- 18. OpenFlow實施平臺是否依賴?
- 19. JAVA支持平臺「依賴」概念?
- 20. C++非平臺依賴聲音
- 21. 處理C++依賴關係(跨平臺)
- 22. GUI依賴於語言和平臺?
- 23. .NET跨平臺緩存依賴關係
- 24. 處理的依賴,使用目標平臺
- 25. Web工具平臺XML編輯器插件的依賴關係
- 26. 錯誤位置的鏈接器標誌
- 27. 什麼是preg_match_all「u」標誌依賴於?
- 28. 語言/平臺/構建無關依賴關係管理器
- 29. Excel依賴下拉列表中的鏈接器
- 30. 創建Eclipse插件時避免依賴於平臺的依賴關係
我必須手動傳遞配置設置嗎?還是有一些系統內省? – Slava