如何使用OpenCV用Bazel构建工程 [英] How to use Bazel to build project uses OpenCV
本文介绍了如何使用OpenCV用Bazel构建工程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
要使用Bazel编译以下代码,WORKSPACE
和BUILD
文件应该是什么样子:
#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屋!
查看全文