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