bazel中的平台依赖链接器标志(用于过剩)

时间:2017-07-19 09:30:51

标签: cross-platform glut bazel

我正在尝试使用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以平台无关的方式链接到过剩?

2 个答案:

答案 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,您应该有一个有效的解决方案。