Bazel:如何运行WORKSPACE规则?

时间:2018-02-28 11:06:25

标签: bazel

我创建了一个自定义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,它会抱怨没有这样的包裹。为了能够运行该规则我需要做什么?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

geofire - key_1234 -- geohash: "abcd" -- latitude: "50.0" -- longitude: "8.0" -- name: "test point 1" - key_5678 -- geohash: "defg" -- latitude: "70.0" -- longitude: "-1.0" -- name: "test point 2"