いくつかのオプションがあります。最も簡単な方法は、おそらく 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
次に、次を WORKSPACE ファイルに追加します。
new_local_repository(
name = "opencv",
path = "/path/to/opencv/install",
build_file = "opencv.BUILD",
)
opencv.BUILD
以下を使用して、WORKSPACE と同じディレクトリに作成します。
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 リポジトリをワークスペースに追加し、ダウンロードしてビルドすることができます。何かのようなもの:
# 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
。
3 番目のオプションとして、WORKSPACE ファイルで cmake と OpenCV の両方を宣言し、genrule を使用して Bazel 内から OpenCV で cmake を実行します。