bazel 中依赖于平台的链接器标志(用于过剩)
platform dependent linker flags in bazel (for glut)
我正在尝试使用 bazel 构建带有 glut 的 C++ 应用程序。它应该适用于 macOS 和 linux。现在的问题是,在 macOS 上,它需要将 "-framework OpenGL", "-framework GLUT"
传递给 linker 标志,而在 linux 上,我可能应该做类似的事情
cc_library(
name = "glut",
srcs = glob(["local/lib/libglut*.dylib", "lib/libglut*.so"]),
...
在 glut.BUILD。
所以问题是
1. 通常如何为 cc_library 规则提供依赖于平台的 linker 选项?
2. 特别是如何 link 使用 bazel 以独立于平台的方式供过于求?
您可以使用 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() 的真实示例。
我遇到了类似的问题,但根据平台选择了正确的编译器,@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" ]
)
在您的 select
中使用 ":darwin"
、":windows"
和 ":linux"
,您应该有一个可行的解决方案。
我正在尝试使用 bazel 构建带有 glut 的 C++ 应用程序。它应该适用于 macOS 和 linux。现在的问题是,在 macOS 上,它需要将 "-framework OpenGL", "-framework GLUT"
传递给 linker 标志,而在 linux 上,我可能应该做类似的事情
cc_library(
name = "glut",
srcs = glob(["local/lib/libglut*.dylib", "lib/libglut*.so"]),
...
在 glut.BUILD。
所以问题是
1. 通常如何为 cc_library 规则提供依赖于平台的 linker 选项?
2. 特别是如何 link 使用 bazel 以独立于平台的方式供过于求?
您可以使用 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() 的真实示例。
我遇到了类似的问题,但根据平台选择了正确的编译器,@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" ]
)
在您的 select
中使用 ":darwin"
、":windows"
和 ":linux"
,您应该有一个可行的解决方案。