在我的规则中,我想通过unzip -d解压缩一个文件,这样我就可以访问一些头了。
目前,我正在通过使用任何解压缩在我的道路上这样做。
ctx.actions.run(
...
executable = "unzip",
)或者,我可以使用/usr/bin/unzip来避免依赖于我的路径。然而,目前还不清楚什么是惯用的方法。根据我对文档的读取,理想情况下,我将为unzip设置某种Bazel二进制目标,该规则将调用该目标。不过,我还不清楚如何定义二进制目标,也许是一个sh_binary。
发布于 2018-11-15 15:43:27
正确的解决方案是在回购中使用解压缩实用程序。(要么在源树中,要么作为外部存储库导入)。
否则,我认为最有原则的方法是编写一个存储库规则,使用unzip (或仅仅期望"/usr/bin/unzip“存在)从路径中查找repository_ctx.which,并使用包装unzip工具的sh_binary创建一个构建文件(repository_ctx.file)。
在这两种情况下,您都必须向消费规则添加一个标签属性"_unzip_tool“:
"_unzip_tool": attr.label(
executable = True,
cfg = "host",
default = Label("@unzip//:unzip_tool"),
),然后像这样使用它:
ctx.actions.run(
...,
executable = ctx.executable._unzip_tool,
)https://stackoverflow.com/questions/53163137
复制相似问题