在bazel中找不到glob

乔治·维尔曼

我目前正在使用Bazel来构建C ++项目。这是我的WORKSPACE文件:

cc_library(
name = "Boost",
srcs = glob(["/usr/local/lib/libboost*.so"]),
hdrs = glob(["/home/duttama/boost_1_55_0/**/*.h"]),
)


cc_library(
name = "OpenCV",
srcs = glob(["/usr/lib/x86_64-linux-gnu/libopencv*.so"]),
hdrs = glob(["/home/duttama/opencv-2.4.13/**/*.h"]),
)


cc_library(
name = "AffectivaSources",
srcs = glob(["/root/affdex-sdk/lib/*.so"]),
hdrs = glob(["/root/affdex-sdk/include/*.h"]),
)

这是我的BUILD文件:

cc_binary(
name = "video-demo",
srcs = ["video-demo.cpp"],
deps = ["//lib:OpenCV",
            "//lib:AffectivaSources",
            "//lib:Boost",
],
)    

运行它时,出现以下错误:

ERROR: /root/sdk-samples/WORKSPACE:17:12: Traceback (most recent call last):
File "/root/sdk-samples/WORKSPACE", line 15
    cc_library(name = "AffectivaSources", srcs = ..."]), ..."]))
File "/root/sdk-samples/WORKSPACE", line 17, in cc_library
    glob
name 'glob' is not defined

我的问题是为什么它找不到glob函数。我不确定在WORKSPACE文件中还需要指定什么,或者如何导入此glob函数。

Jin

WORKSPACE文件不适用于cc_binary/ cc_rules; 它用于定义项目范围的规则(例如外部依赖项),而glob函数在WORKSPACE文件中不可用。有关WORKSPACE规则,请参见https://docs.bazel.build/versions/master/be/workspace.html

好像您要将c ++依赖项导入到项目中:在此处查看new_local_repository规则这使您可以指向本地系统中的文件夹。它将要求您编写包含每个外部依赖项的各自规则的BUILD文件cc_library

例如,在您的WORKSPACE文件中:

new_local_repository(
  name = "affectivalibrary",
  path = "/root/affdex-sdk/",
  build_file = "BUILD.affectiva",
)

在您的项目中,创建一个BUILD.affectiva

cc_library(
  name = "aff",
  srcs = glob(["lib/*.so"]),
  hdrs = glob(["include/*.h"]),
)

完成此操作后,您可以使用以下语法在BUILD文件中依赖它们:

cc_binary(
  name = "video-demo",
  srcs = ["video-demo.cpp"],
  deps = ["@affectivalibrary//:aff", ...]
)

我还看到您在srcs/hdrs属性中使用了绝对文件路径-glob模式不能是绝对的。请在此处参考BUILD文件目标标签的语法:https : //docs.bazel.build/versions/master/build-ref.html#lexi

如果您仍然感到困惑,那么Bazel存储库中有一个示例c ++项目:https : //github.com/bazelbuild/bazel/tree/master/examples/cpp

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章