2017-07-19 124 views
2

我正在尝试使用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)

回答

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

我必须手动传递配置设置吗?还是有一些系统内省? – Slava

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,你应该有一个解决方案。