我正在尝试使用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. CMake Fortran编译器依赖标志
- 2. 将链接器依赖项嵌入到目标文件中?
- 3. Java依赖于平台的类继承
- 4. 是CKeditor contextmenu平台的依赖?
- 5. cmake:boost依赖和visual studio(或任何具有自动链接功能的平台)
- 6. 删除链接器依赖关系
- 7. C++ Factory和链接器依赖关系
- 8. 链接依赖观测值
- 9. 链接依赖属性
- 10. JNI依赖和跨平台构建
- 11. .NET跨平台缓存依赖关系
- 12. OpenFlow实施平台是否依赖?
- 13. GUI依赖于语言和平台?
- 14. JAVA支持平台“依赖”概念?
- 15. 处理C++依赖关系(跨平台)
- 16. Web工具平台XML编辑器插件的依赖关系
- 17. 错误位置的链接器标志
- 18. 语言/平台/构建无关依赖关系管理器
- 19. 创建Eclipse插件时避免依赖于平台的依赖关系
- 20. c#库的链接依赖关系
- 21. 目标平台中指定的隐式依赖性在启动时未解析
- 22. 如何处理Bazel中的C++库循环依赖项?
- 23. 根据平台切换Gradle中的依赖关系
- 24. 特定于平台的依赖关系爬到Eclipse插件中
- 25. 解释链接器标志“-lm”
- 26. 发送链接器标志到ndk-build
- 27. Xcode忽略其他链接器标志
- 28. 动态链接器依赖信息嵌入在档案中
- 29. VC++链接器删除间接依赖于静态库
- 30. 如何使用Gradle中的分类器(平台版本)排除依赖关系?
我必须手动传递配置设置吗?还是有一些系统内省? – Slava