如何配置Bazel WORKSPACE实现非Bazel包Graphviz的自动拉取与构建
你可以通过以下配置实现graphviz的自动拉取构建,完全消除本地路径依赖:
配置步骤
1. 导入构建依赖规则
首先在WORKSPACE文件头部添加rules_foreign_cc导入配置,该规则用于处理第三方C/C++项目的构建集成:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "rules_foreign_cc", sha256 = "6041f3398ed575386c0aeb1b19a31e12c05e20c062c9298ae90768665399a17f", strip_prefix = "rules_foreign_cc-0.9.0", url = "https://github.com/bazelbuild/rules_foreign_cc/archive/refs/tags/0.9.0.tar.gz", ) load("@rules_foreign_cc//foreign_cc:repositories.bzl", "rules_foreign_cc_dependencies") rules_foreign_cc_dependencies()
2. 替换原有graphviz本地依赖配置
删除原来的new_local_repository代码块,替换为以下配置,实现源码自动拉取和编译:
http_archive( name = "graphviz", build_file_content = """ load("@rules_foreign_cc//foreign_cc:defs.bzl", "configure_make") package(default_visibility = ["//visibility:public"]) configure_make( name = "graphviz_lib", lib_source = "@graphviz//:all_srcs", out_static_libs = ["libgvc.a", "libcgraph.a", "libcdt.a"], out_include_dir = "include/graphviz", ) cc_library( name = "graphviz", deps = [":graphviz_lib"], ) """, sha256 = "c185f14b6440037922c21fd3437807e7372183d789792b72b837774c16f66155", strip_prefix = "graphviz-2.49.1", urls = ["https://gitlab.com/api/v4/projects/4207231/packages/generic/graphviz-releases/2.49.1/graphviz-2.49.1.tar.gz"], )
配置说明
- 构建时Bazel会自动校验源码包哈希值,拉取对应版本的graphviz源码,无需本地预安装
- 编译参数可以根据你的实际需求调整
configure_make的configure_args字段,添加自定义编译选项 - 编译产物会被自动缓存,只有第一次构建或者配置变更时才会重新拉取编译
- 所有项目成员使用统一的graphviz版本,不会出现本地依赖版本不一致的问题
内容的提问来源于stack exchange,提问作者rossb83
相关产品推荐
相关产品推荐

