Bazel:如何运行工作区规则?

Bazel:如何运行工作区规则?,bazel,Bazel,我已经创建了一个自定义存储库规则来从samba共享获取文件。我有一个使用此规则的工作区文件: 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\u test它会抱怨没有这样的

我已经创建了一个自定义存储库规则来从samba共享获取文件。我有一个使用此规则的工作区文件:

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\u test
它会抱怨没有这样的包。要运行该规则,我需要做什么?

这取决于存储库规则的实现方式,但存储库规则的
名称不是目标名称(
:boost\u test
),而是存储库名称。在本例中,它看起来类似于
@boost\u test/:some\u target

它看起来像是
smbget
实现将文件路径作为目标公开。在
repository\u规则
实现中,您需要编写一个
构建
文件,可能使用该文件定义一个默认目标名称,您可以在
@boost\u测试
存储库中引用该名称


例如,请看。在
http\u文件
的实现中,它下载一个文件并创建一个名为
file
的目标的默认构建文件,因此,如果您有一个类似
http\u文件(name=“some\u文件”,url=…)
的工作区规则(如果您只想运行“smbget”,则可以将下载的文件称为
@some\u name/:file
)规则(而不是中可能生成的任何规则)您可以使用fetch命令:

bazel fetch@boost\u test/…