Bazel使用OpenCV 3.3依赖构建

Dam*_*ard 6 c++ opencv bazel

我正在尝试使用Bazel来编译和分发基于OpenCV的C++代码,而我正面临着一个我无法解决的问题.

我在源代码上,在Ubuntu 16.04 LTS上构建并安装OpenCV 3.3,并支持CUDA(CUDA 8).我将它安装在标准目录/ usr/local中.

鉴于此,我使用此WORKSPACE文件创建了我的项目:

new_local_repository(
    name = "opencv",
    path = "/usr/local",
    build_file = "opencv.BUILD",
)
Run Code Online (Sandbox Code Playgroud)

opencv.BUILD包含:

cc_library(
    name = "opencv",
    srcs = glob(["lib/*.so*"]),
    hdrs = glob(["include/**/*.hpp"]),
    includes = ["include"],
    visibility = ["//visibility:public"], 
    linkstatic = 1,
)
Run Code Online (Sandbox Code Playgroud)

我可以在我自己的代码中使用它:

cc_binary(
    name = "main",
    srcs = ["main.cc"],
    deps = [
        "@opencv//:opencv"
    ],
)
Run Code Online (Sandbox Code Playgroud)

但是OpenCV中的一些源文件如下:

/usr/local/include/opencv2/flann/flann_base.hpp

包括来自同一目录的头文件,例如:

#include "general.h"
Run Code Online (Sandbox Code Playgroud)

当我使用Bazel构建时,我收到此错误:

ERROR: /home/damien/main/BUILD:1:1: C++ compilation of rule '//main:main' failed (Exit 1)
In file included from external/opencv/include/opencv2/flann.hpp:48:0,
                 from external/opencv/include/opencv2/opencv.hpp:62,
                 from main/main.cc:1:
external/opencv/include/opencv2/flann/flann_base.hpp:38:21: fatal error: general.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

(general.h与flann_base.hpp位于同一目录中).

如果我将#include指令重写为:

#include "opencv2/flann/general.h"
Run Code Online (Sandbox Code Playgroud)

它汇编得很好.但这不是一个方便的解决方案.

所以我的问题是:有没有办法告诉Bazel在与此库中的"当前"文件相同的目录中查找标题?我看看Bazel的每个C++指令,但我没有看到任何实现它的东西.

先感谢您.

Dam*_*ard 5

好吧,对我感到羞耻.我必须导入*.h:

cc_library(
    name = "opencv",
    srcs = glob(["lib/*.so*"]),
    hdrs = glob(["include/**/*.hpp", "include/**/*.h"]),
    includes = ["include"],
    visibility = ["//visibility:public"], 
    linkstatic = 1,
)
Run Code Online (Sandbox Code Playgroud)