如何使用OpenCV用Bazel构建工程 [英] How to use Bazel to build project uses OpenCV

查看:35
本文介绍了如何使用OpenCV用Bazel构建工程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用Bazel构建使用OpenCV库的C++代码的最佳方式是什么?也就是说,构建规则会是什么样子?

要使用Bazel编译以下代码,WORKSPACEBUILD文件应该是什么样子:


#include "opencv2/opencv.hpp"
#include "iostream"

int main(int, char**) {
  using namespace cv;
  VideoCapture cap(0);
  Mat save_img; cap >> save_img;
  if(save_img.empty())
  {
    std::cerr << "ERROR >> Something is wrong with camera..." << std::endl;
  }
  imwrite("test.jpg", save_img);
  return 0;
}

推荐答案

有几个选项。最简单的方法可能是按照OpenCV站点推荐的方式在本地安装:

git clone https://github.com/Itseez/opencv.git
cd opencv/
mkdir build install
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/path/to/opencv/install ..
make install

然后将以下内容添加到您的工作区文件:

new_local_repository(
    name = "opencv",
    path = "/path/to/opencv/install",
    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,
)

然后,您的代码可以依赖@opencv//:opencv链接到lib/下的.so中,并引用include/下的标头。

但是,这不是很容易移植。如果你想要一个便携的解决方案(而且你觉得很有野心),你可以把OpenCV git repo添加到你的工作区,然后下载并构建它。类似于:

# WORKSPACE
new_git_repository(
    name = "opencv",
    remote = "https://github.com/Itseez/opencv.git",
    build_file = "opencv.BUILD",
    tag = "3.1.0",
)

并使opencv.BUILD类似于:

cc_library(
    name = "core",
    visibility = ["//visibility:public"],
    srcs = glob(["modules/core/src/**/*.cpp"]),
    hdrs = glob([
        "modules/core/src/**/*.hpp", 
        "modules/core/include/**/*.hpp"]
    ) + [":module-includes"],
)

genrule(
    name = "module-includes",
    cmd = "echo '#define HAVE_OPENCV_CORE' > $@",
    outs = ["opencv2/opencv_modules.hpp"],
)

...

那么您的代码可能依赖于更具体的目标,例如@opencv//:core

作为第三个选项,您可以在工作区文件中声明cmake和openCV,并使用genRule从Bazel中对OpenCV运行cmake。

这篇关于如何使用OpenCV用Bazel构建工程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆