簡體   English   中英

使用 OpenCV 3.3 依賴項構建 Bazel

[英]Bazel build with OpenCV 3.3 dependencies

我正在嘗試使用 Bazel 編譯和分發基於 OpenCV 的 C++ 代碼,但我遇到了一個無法解決的問題。

我從源代碼構建和安裝 OpenCV 3.3,在 Ubuntu 16.04 LTS 上,支持 CUDA (CUDA 8)。 我將它安裝在標准目錄 /usr/local 中。

鑒於它,我用這個 WORKSPACE 文件創建了我的項目:

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"

當我使用 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

(general.h 與 flann_base.hpp 位於同一目錄中)。

如果我將#include 指令重寫為:

#include "opencv2/flann/general.h"

它編譯得很好。 但這不是一個方便的解決方案。

所以我的問題是:有沒有辦法告訴 Bazel 在與該庫中“當前”文件相同的目錄中查找標題? 我查看了 Bazel 的每一個 C++ 指令,但我沒有看到任何東西可以實現它。

提前謝謝你。

好吧,鄙視我。 我必須導入 *.h :

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

在我使用 opencv4 和 Damien 設置的情況下,我在包含highgui.hpp時遇到錯誤:

 external/opencv/include/opencv4/opencv2/highgui.hpp:46:10: fatal
 error: opencv2/core.hpp: No such file or directory  #include
 "opencv2/core.hpp"

我可以修復它調整包括添加 opencv4:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM