bazel - Bazel 如何解释标签中的 `/`、`:`、`//` 和 `@` 等特殊词位?
问题描述
label
在处理外部存储库(带有自己的目录)时,我无法理解如何构建正确的表单WORKSPACE
。
/
, :
,//
或等字符的语义是什么@
?
例如:
@foo/bar
@foo:bar
//foo
foo
它们在外部存储库中使用时是否保留其含义?另外,有//external
什么特别之处吗?
解决方案
/
是包和目标名称的分隔符。
relative/package/to/my:target
//absolute/package/to:my/file/target.java
包被定义为包含一个BUILD
或BUILD.bazel
文件的目录。
:
是用于在包中选择规则或文件目标的词位。
//my/package:my_java_binary
选择my_java_binary
定义的目标<workspace root>/my/package/BUILD
//my/package:file.go
<workspace root>/my/package/file.go
如果该文件<workspace root>/my/package/BUILD
存在,并且该 BUILD 文件中是否有规则引用它,则选择该文件。
//:my/nested/file.txt
<workspace root>/my/nested/file.txt
如果存在则选择文件<workspace root>/BUILD
,但不在my
和my/nested
子目录中。
//
是包含 WORKSPACE 文件的当前或最近的父目录的位置。
否则称为工作空间根。
@
用于在左侧使用时通过其名称引用存储库//
@io_bazel_rules_scala//scala:scala.bzl
:在您的 WORKSPACE 文件中查找名为io_bazel_rules_scala
. 通常使用http_archive
or定义git_repository
。@//my/package:target
:@
单独指当前工作区。
从 Bazel 0.16.0 开始,@
可以在包名称中使用。
它们在外部存储库中使用时是否保留其含义?
是的,将@<repository>
语法视为命名空间机制。
另外, //external 有什么特别之处吗?
是的,它用于bind
功能,不再推荐。bind
让你给目标一个别名//external
。
推荐阅读
- android - 将字符串变量从 recyclerview 传递到片段
- reactjs - 客户端上呈现的内容与服务器上呈现的内容不同的页面上的类名错误
- sharepoint-2013 - 自定义显示表单中的超链接
- reactjs - 如何在 React 中管理 4 层的 Z-index?
- javascript - WebRTC + nodejs/socketio 没有音频
- prolog - Prolog:存储操作的结果
- r - 通过 R 中的 data.table 自定义 dcast
- android-studio - 线程失控的问题
- unity3d - 有什么方法可以在 Blender 中建造房屋并将其导出到 Unity?
- javascript - 在 JavaScript 中,如何通过单击对应的图标来隐藏/显示 div