opencv - 从多个 repos 构建 Bazel 包
问题描述
我正在尝试使用外部模块构建 OpenCV,但无法提出一个干净的解决方案。
我已经使用 CMake (rules_foreign_cc) 成功构建了 OpenCV。但是为了能够使用外部模块进行构建,我需要下载一个单独的 repo (opencv_contrib),然后使用第二个 repo 的路径作为构建参数进行构建。
有没有一种方法可以做到这一点,而不必创建我自己的结合这两个 git 存储库的 git 存储库?
解决方案
# WORKSPACE file
http_archive(
name = "rules_foreign_cc",
strip_prefix = "rules_foreign_cc-4010620160e0df4d894b61496d3d3b6fc8323212",
sha256 = "07e3414cc841b1f4d16e5231eb818e5c5e03e2045827f5306a55709e5045c7fd",
url = "https://github.com/bazelbuild/rules_foreign_cc/archive/4010620160e0df4d894b61496d3d3b6fc8323212.zip",
)
load("@rules_foreign_cc//foreign_cc:repositories.bzl", "rules_foreign_cc_dependencies")
rules_foreign_cc_dependencies()
http_archive(
name = "opencv_contrib",
build_file="//:opencv_contrib.BUILD",
sha256 = "9f52fd3114ac464cb4c9a2a6a485c729a223afb57b9c24848484e55cef0b5c2a",
urls = ["https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.2.tar.gz"],
strip_prefix = "opencv_contrib-4.5.2",
)
http_archive(
name = "opencv",
sha256="ae258ed50aa039279c3d36afdea5c6ecf762515836b27871a8957c610d0424f8",
build_file="//:opencv.BUILD",
urls = ["https://github.com/opencv/opencv/archive/refs/tags/4.5.2.tar.gz"],
strip_prefix = "opencv-4.5.2",
)
# opencv_contrib.BUILD file
filegroup(
name = "modules",
srcs = glob(["modules/**"]),
visibility = ["//visibility:public"],
)
# opencv.BUILD file
load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")
filegroup(
name = "srcs",
srcs = glob(["**"]),
visibility = ["//visibility:public"],
)
cmake(
name = "opencv",
generate_args = ["-GNinja"],
additional_inputs=["@opencv_contrib//:modules"],
cache_entries = {
"BUILD_SHARED_LIBS": "OFF",
"BUILD_opencv_world": "ON",
"OPENCV_EXTRA_MODULES_PATH": "$$EXT_BUILD_ROOT$$/external/opencv_contrib/modules",
},
lib_source = ":srcs",
out_static_libs = ["libopencv_world.a"],
)
推荐阅读
- python - 如何修复“ValueError:输入 0 与层展平不兼容:预期 min_ndim=3,发现 ndim=2”加载模型时出现错误
- java - 如何让我的游戏变慢(FPS 变慢)?
- excel - 将用户表单定位在 excel 所在的同一台显示器上
- javascript - 在地图函数中使用三元运算符会呈现两个结果
- drupal - Drupal 8 - 通过 Uri 查找节点
- typescript - 如何在 typescript 中创建一个实现特定接口的未定义类数组?
- machine-learning - 批量标准化是否适用于小批量?
- c++ - 如何使用标准库迭代相等的值?
- python - pytest 是否应该用于集成测试嵌入式系统?
- javascript - Reactjs,为数组的每个元素设置不同的样式