Opencv 从多个回购协议构建Bazel包

Opencv 从多个回购协议构建Bazel包,opencv,bazel,bazel-rules,Opencv,Bazel,Bazel Rules,我正在尝试用外部模块构建OpenCV,但还没有找到一个干净的解决方案 我已经成功地使用CMake(rules\u foreign\u cc)构建了OpenCV。但是为了能够使用外部模块进行构建,我需要下载一个单独的repo(opencv_contrib),然后使用第二个repo的路径作为构建参数进行构建 有没有一种方法可以做到这一点,而不必创建我自己的git回购协议,将这两个git回购协议结合起来?您可以在工作区中使用rule文件让bazel在构建之前自动克隆git回购协议 将其添加到工作区文件

我正在尝试用外部模块构建OpenCV,但还没有找到一个干净的解决方案

我已经成功地使用CMake(rules\u foreign\u cc)构建了OpenCV。但是为了能够使用外部模块进行构建,我需要下载一个单独的repo(opencv_contrib),然后使用第二个repo的路径作为构建参数进行构建

有没有一种方法可以做到这一点,而不必创建我自己的git回购协议,将这两个git回购协议结合起来?

您可以在
工作区中使用rule
文件让bazel在构建之前自动克隆git回购协议

将其添加到
工作区
文件后,就可以在自己的repo中引用远程repo的构建目标

查看示例。

#工作区文件
http\u档案(
name=“规则\u外来\u抄送”,
strip_prefix=“规则_foreign_cc-4010620160e0df4d894b61496d3d3b6fc8323212”,
sha256=“07e3414cc841b1f4d16e5231eb818e5c5e03e2045827f5306a55709e5045c7fd”,
url=”https://github.com/bazelbuild/rules_foreign_cc/archive/4010620160e0df4d894b61496d3d3b6fc8323212.zip",
)
加载(“@rules\u foreign\u cc//foreign\u cc:repositories.bzl”,“rules\u foreign\u cc\u dependencies”)
规则\外部\抄送\依赖项()
http\u档案(
name=“opencv_contrib”,
build_file=“/:opencv_contrib.build”,
sha256=“9f52fd3114ac464cb4c9a2a6a485c729a223afb57b9c24848484e55cef0b5c2a”,
URL=[”https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.2.tar.gz"],
strip_prefix=“opencv_contrib-4.5.2”,
)
http\u档案(
name=“opencv”,
sha256=“ae258ed50aa039279c3d36afdea5c6ecf762515836b27871a8957c610d0424f8”,
build_file=“/:opencv.build”,
URL=[”https://github.com/opencv/opencv/archive/refs/tags/4.5.2.tar.gz"],
strip_prefix=“opencv-4.5.2”,
)
#opencv_contrib.BUILD文件
文件组(
name=“模块”,
srcs=glob([“modules/**]”),
可见性=[“//可见性:公共”],
)
#opencv.BUILD文件
加载(“@rules\u foreign\u cc//foreign\u cc:defs.bzl”,“cmake”)
文件组(
name=“srcs”,
srcs=glob([“**]”),
可见性=[“//可见性:公共”],
)
克马克(
name=“opencv”,
生成参数=[“-GNinja”],
其他输入=[“@opencv\u contrib/:modules”],
缓存\u项={
“构建共享库”:“关闭”,
“构建opencv世界”:“开启”,
“OPENCV\u额外\u模块\u路径”:“$$EXT\u BUILD\u ROOT$$$/external/OPENCV\u contrib/MODULES”,
},
lib_source=“:srcs”,
out_static_libs=[“libopencv_world.a”],
)

我知道git_存储库规则。我的问题不是克隆回购协议,而是指定另一个回购协议的路径。例如,要构建第一个repo,我需要传入一个构建标志,如“-DEXTRA_MODULES=../opencv_contrib”您在什么环境下运行这个?当我在Ubuntu18.04上使用Bazel4.0时,我遇到了这个错误“OpenCV需要启用“OpenCV_contrib”中的“cudev”模块”。谢谢你的回复!这里的关键是明确的
OPENCV\u EXTRA\u MODULES\u PATH
。opencv有关于cmake变量的文档。