繁体   English   中英

Bazel:如何运行WORKSPACE规则?

[英]Bazel: How to run a WORKSPACE rule?

我创建了一个自定义的repository_rule来从samba共享中获取文件。 我有一个使用此规则的WORKSPACE文件:

load('//build_tools/rules:download.bzl', 'smbget')

smbget(
   name="boost_test",
   path="/tools/boost/v1.61/lnx_x64/lib/libboost_atomic.so"
)

现在,我只想运行规则以检查它是否有效? 如果我运行bazel build :boost_test它会抱怨没有这样的软件包。 为了能够执行该规则,我需要做什么?

这取决于存储库规则的实现方式,但是存储库规则的name不是目标名称( :boost_test ),而是存储库名称。 在这种情况下,它将看起来像@boost_test//:some_target

看起来smbget实现接受一个文件路径以作为目标公开。 repository_rule实现中,您可能需要编写一个BUILD文件,也许使用repository_ctx.file ,它定义了可以在@boost_test存储库中引用的默认目标名称。

例如,查看http_file文档 http_file的实现中,它将下载一个文件并创建一个默认的BUILD文件,其目标名为file ,因此,如果您拥有像http_file(name = "some_file", url = ...)这样的http_file(name = "some_file", url = ...)的WORKSPACE规则,则可以将下载的文件称为@some_name//:file http_file(name = "some_file", url = ...)

如果只想运行“ smbget”规则(而不是其中可能生成的任何规则),则可以使用fetch命令:

bazel fetch @boost_test//...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM