2017-10-06 8 views
3

J'essaie d'utiliser Bazel pour compiler et distribuer un code C++ basé sur OpenCV et je suis confronté à un problème que je ne peux pas résoudre.Bazel construit avec les dépendances OpenCV 3.3

Je compile et installe OpenCV 3.3 à partir de sources, sur un Ubuntu 16.04 LTS, avec le support CUDA (CUDA 8). Je l'installe dans le répertoire standard/usr/local.

DONNAIT, j'ai créé mon projet avec ce fichier WORKSPACE:

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

Le opencv.BUILD contient:

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

Et je peux l'utiliser dans mon propre code à l'aide:

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

mais certains fichiers source dans OpenCV, comme:

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

inclut les en-têtes fichier à partir du répertoire, comme:

#include "general.h" 

Et quand je construis avec Bazel, je reçois cette erreur:

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 est dans le même répertoire comme flann_base.hpp).

Si je réécris la directive #include comme:

#include "opencv2/flann/general.h" 

Il compile bien. Mais ce n'est pas une solution pratique. Donc, ma question est la suivante: y a-t-il un moyen de dire à Bazel de chercher les en-têtes dans le même répertoire que le fichier "courant" de cette bibliothèque? Je regarde toutes les directives C++ de Bazel, mais je ne vois rien pour l'atteindre.

Merci à l'avance.

Répondre

4

Ok, honte à moi. Je dois importer * .h:

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

Toute cette paire Q & A m'a beaucoup aidé! travaillant comme un charme. Je vous remercie. – nipunasudha