bazel中的平台依赖链接器标志(for glut)
问题描述:
我正在尝试使用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)
答
您可以使用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的仓库,它有选择使用一些好的现实世界的例子()。
答
我有一个类似的问题,但根据平台选择正确的编译器和@ 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,你应该有一个解决方案。
我必须手动传递配置设置吗?还是有一些系统内省? – Slava