我正在尝试使用bazel来构建c ++应用程序。它应该适用于macos和linux。现在问题是在macos上它需要将"-framework OpenGL", "-framework GLUT"
传递给链接器标志,而在linux上我应该这样做
cc_library(
name = "glut",
srcs = glob(["local/lib/libglut*.dylib", "lib/libglut*.so"]),
...
过剩.BUILD。
所以问题是
1.如何为cc_library规则提供平台相关的链接器选项?
2.特别是如何使用bazel以平台无关的方式链接到过剩?
答案 0 :(得分: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": [],
})
...
)
在Bazel github存储库中挖掘它,它有一些使用select()的真实世界的例子。
答案 1 :(得分:1)
我有类似的问题,但根据平台选择正确的编译器,@ 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
,您应该有一个有效的解决方案。