有没有办法使Bazel与可传递存储库一起使用?

我使用分布在许多存储库中的海量代码库,并使用了更多的第三方依赖项。目的是使构建变得封闭,我打算使用Bazel来实现。一方面,Bazel具有git_repository规则来引用WORKSPACE文件中的外部存储库。另一方面,WORKSPACE文件不是递归加载的,因此要获得间接依赖关系,我需要以某种方式构建所有包含的WORKSPACE文件。我想知道是否有人已经使用Bazel或其他一些现有工具解决了这个问题。有没有办法将WORKSPACE作为构建的一部分进行扩展?可能是WORKSPACE可以#include其他(生成的)文件吗?

JACYH 回答:有没有办法使Bazel与可传递存储库一起使用?

WORKSPACE文件可以load,然后调用macros,与#include具有相似的功能。

一个常见的模式是每个项目都有一个宏,该宏调用宏(对于其他项目的依赖性)并创建*_archive规则(对于直接下载的文件的依赖性),以便进行构建。例如,protobuf具有protobuf_deps来实现此模式。如果您使用protobuf创建存储库(使用git_repositoryhttp_archive或其他任何存储库规则),则可以加载该宏并调用它,然后您将自动获取所有可传递对象依赖性。

例如(from Chromium):

load("@bazel_tools//tools/build_defs/repo:http.bzl","http_archive")
# This com_google_protobuf repository is required for proto_library rule.
# It provides the protocol compiler binary (i.e.,protoc).
http_archive(
    name = "com_google_protobuf",strip_prefix = "protobuf-master",urls = ["https://github.com/protocolbuffers/protobuf/archive/master.zip"],)
load("@com_google_protobuf//:protobuf_deps.bzl","protobuf_deps")
protobuf_deps()

我之所以展示http_archive是因为它更易于使用,但您可以根据需要将其轻松更改为git_archive

使所有这些工作均有效的另一种常见模式是protobuf_deps在创建每个native.existing_rule之前检查http_archive的方式。这样一来,您就可以直接在WORKSPACE文件中实例化特定版本的依赖项(或从特定来源等),以覆盖原本会引入的一个protobuf。

本文链接:https://www.f2er.com/3106396.html

大家都在问