首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何“正确”通过Starlark从usr/bin调用可执行文件?

如何“正确”通过Starlark从usr/bin调用可执行文件?
EN

Stack Overflow用户
提问于 2018-11-05 22:25:49
回答 1查看 357关注 0票数 0

在我的规则中,我想通过unzip -d解压缩一个文件,这样我就可以访问一些头了。

目前,我正在通过使用任何解压缩在我的道路上这样做。

代码语言:javascript
复制
ctx.actions.run(
      ...
      executable = "unzip",
)

或者,我可以使用/usr/bin/unzip来避免依赖于我的路径。然而,目前还不清楚什么是惯用的方法。根据我对文档的读取,理想情况下,我将为unzip设置某种Bazel二进制目标,该规则将调用该目标。不过,我还不清楚如何定义二进制目标,也许是一个sh_binary

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-15 15:43:27

正确的解决方案是在回购中使用解压缩实用程序。(要么在源树中,要么作为外部存储库导入)。

否则,我认为最有原则的方法是编写一个存储库规则,使用unzip (或仅仅期望"/usr/bin/unzip“存在)从路径中查找repository_ctx.which,并使用包装unzip工具的sh_binary创建一个构建文件(repository_ctx.file)。

在这两种情况下,您都必须向消费规则添加一个标签属性"_unzip_tool“:

代码语言:javascript
复制
"_unzip_tool": attr.label(
                   executable = True,
                   cfg = "host",
                   default = Label("@unzip//:unzip_tool"),
               ),

然后像这样使用它:

代码语言:javascript
复制
ctx.actions.run(
    ...,
    executable = ctx.executable._unzip_tool,
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53163137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档