[英]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.