2017-10-06 4 views
3

Ich versuche, Bazel verwenden, um einen OpenCV-basierten C++ - Code zu kompilieren und zu verteilen, und ich bin mit einem Problem konfrontiert, das ich nicht lösen kann.Bazel Build mit OpenCV 3.3 Abhängigkeiten

Ich baue und installiere OpenCV 3.3 aus Quellen, auf einem Ubuntu 16.04 LTS, mit CUDA-Unterstützung (CUDA 8). Ich installiere es im Standardverzeichnis/usr/local.

es gegeben, habe ich mein Projekt mit diesem Arbeitsbereich-Datei:

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

Die opencv.BUILD enthält:

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

Und ich es in meinem eigenen Code verwenden können:

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

aber einige Quelldateien in OpenCV, wie:

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

enthält Header aus dem gleichen Verzeichnis-Datei, wie:

#include "general.h" 

Und wenn ich mit Bazel bauen, bekomme ich diesen Fehler:

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 ist im gleichen Verzeichnis als flann_base.hpp).

Wenn ich die # include-Direktive umschreiben als:

#include "opencv2/flann/general.h" 

Es ist gut kompiliert. Aber das ist keine bequeme Lösung.

Meine Frage ist also: Gibt es eine Möglichkeit, Bazel zu sagen, nach Kopfzeilen im selben Verzeichnis wie die "aktuelle" Datei in dieser Bibliothek zu suchen? Ich schaue auf alle C++ - Anweisungen von Bazel, aber ich sehe nichts, um es zu erreichen.

Vielen Dank im Voraus.

Antwort

4

Ok, Schande über mich. Ich muss * .h importieren:

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

Dieses ganze Frage-und-Antwort-Paar hat mir sehr geholfen! funktioniert wie ein Charme. Vielen Dank. – nipunasudha

Verwandte Themen