Bazel 如何解释标签中的特殊词位,如 `/`、`:`、`//` 和 `@`?
How does Bazel interpret special lexemes like `/`, `:`, `//` and `@` in labels?
在处理外部存储库(具有自己的 WORKSPACE
的目录)时,我无法理解如何构建正确的 label
表单。
/
、:
、//
或 @
等字符的语义是什么?
例如:
@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
选择在 <workspace root>/my/package/BUILD
中定义的目标 my_java_binary
//my/package:file.go
选择文件 <workspace root>/my/package/file.go
如果 <workspace root>/my/package/BUILD
存在,并且该 BUILD 文件中有引用它的规则。
//:my/nested/file.txt
如果 <workspace root>/BUILD
存在,但不在 my
和 my/nested
子目录中,则选择文件 <workspace root>/my/nested/file.txt
。
//
是包含 WORKSPACE 文件的当前或最近父目录的位置。
也称为工作区根目录。
@
用于在 //
左侧按名称引用存储库
@io_bazel_rules_scala//scala:scala.bzl
:在您的 WORKSPACE 文件中查找名为 io_bazel_rules_scala
的存储库。通常使用 http_archive
或 git_repository
. 定义
@//my/package:target
: @
单独引用当前工作空间。
自 Bazel 0.16.0 起,@
可用于包名。
Do they preserve their meaning when used in an external repository?
是的,将 @<repository>
语法视为命名空间机制。
Also, is //external special in any way?
是的,用于bind
功能,不推荐使用。 bind
允许您在 //external
.
中为目标指定一个别名
在处理外部存储库(具有自己的 WORKSPACE
的目录)时,我无法理解如何构建正确的 label
表单。
/
、:
、//
或 @
等字符的语义是什么?
例如:
@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
选择在 <workspace root>/my/package/BUILD
my_java_binary
//my/package:file.go
选择文件 <workspace root>/my/package/file.go
如果 <workspace root>/my/package/BUILD
存在,并且该 BUILD 文件中有引用它的规则。
//:my/nested/file.txt
如果 <workspace root>/BUILD
存在,但不在 my
和 my/nested
子目录中,则选择文件 <workspace root>/my/nested/file.txt
。
//
是包含 WORKSPACE 文件的当前或最近父目录的位置。
也称为工作区根目录。
@
用于在 //
@io_bazel_rules_scala//scala:scala.bzl
:在您的 WORKSPACE 文件中查找名为io_bazel_rules_scala
的存储库。通常使用http_archive
或git_repository
. 定义
@//my/package:target
:@
单独引用当前工作空间。
自 Bazel 0.16.0 起,@
可用于包名。
Do they preserve their meaning when used in an external repository?
是的,将 @<repository>
语法视为命名空间机制。
Also, is //external special in any way?
是的,用于bind
功能,不推荐使用。 bind
允许您在 //external
.