2017-10-06 67 views
3

我试图用巴泽勒编译和发布基于OpenCV的C++代码,我现在面临一个问题,我解决不了。巴泽尔建立与OpenCV的3.3依赖

我建立和从源安装OpenCV 3.3,上一个Ubuntu 16.04 LTS,具有CUDA支持(CUDA 8)。我将它安装在标准目录/ usr/local中。

考虑它,我创建了这个工作区文件项目:

new_local_repository(
    name = "opencv", 
    path = "/usr/local", 
    build_file = "opencv.BUILD", 
) 

的opencv.BUILD包含:

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

我可以用用它自己的代码:

cc_binary(
    name = "main", 
    srcs = ["main.cc"], 
    deps = [ 
     "@opencv//:opencv" 
    ], 
) 

但在OpenCV的一些源文件,如:

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

包括头从同一目录下的文件,如:

#include "general.h" 

当我建立与巴泽尔,我得到这个错误:

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 

(general.h中是在同一目录作为flann_base.hpp)。

如果我重写#include指令为:

#include "opencv2/flann/general.h" 

它编译好。但这不是一个方便的解决方案。

所以我的问题是:有没有办法告诉巴泽勒找头在同一个目录中这个库中的“当前”文件?我查看Bazel的每个C++指令,但我没有看到任何实现它的方法。

预先感谢您。

回答

4

好吧,可耻的是我。我必须输入* .h:

cc_library(
    name = "opencv", 
    srcs = glob(["lib/*.so*"]), 
    hdrs = glob(["include/**/*.hpp", "include/**/*.h"]), 
    includes = ["include"], 
    visibility = ["//visibility:public"], 
    linkstatic = 1, 
) 
+0

这整个问答对帮助了我很多人!像魅力一样工作。谢谢。 – nipunasudha