如果我不知道 zip 的内容,如何正确解压缩 bazel 中的文件?

mat*_*wiz 6 bazel

我要定义一个规则来解压缩给定的 zip 文件。但是,例如,我不知道 zip 的内容,因此我无法outs在 genrule 中指定。这似乎是一个常见问题,谷歌搜索让我找到了遇到类似情况的人,但我还没有看到如何解决这个问题的具体例子。

我想要这样的东西:

genrule(
  name="unzip",
  src="file.zip",
  outs=glob(["**"]), # except you're not allowed to use glob here
  cmd = "unzip $(location file)",
)
Run Code Online (Sandbox Code Playgroud)

小智 3

您可以使用工作空间规则BUILD为 zip创建一个包含所有内容的文件。

你的文件中有类似这样的内容WORKSPACE

new_http_archive(
    name = "my_zip",
    url = "http://example.com/my_zip.zip",
    build_file_content = """
        filegroup(
            name = "srcs",
            srcs = glob(["*"]),
            visibility = ["//visibility:public"]
        )
    """
)
Run Code Online (Sandbox Code Playgroud)

然后,BUILD您可以从文件中引用它作为输入@my_zip//:srcs