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.
Toute cette paire Q & A m'a beaucoup aidé! travaillant comme un charme. Je vous remercie. – nipunasudha