Bazel中的“ @”符号是什么意思?

时间:2018-10-14 10:49:27

标签: bazel

我目前正在研究Bazel构建系统。我总是在Bazel脚本中看到@符号,但是找不到有关它的任何文档。我在Bazel网站上进行了搜索,但结果似乎没有用。 @ in Bazel。 例如:

filegroup(
name = "toolchain_fg",
srcs = [
    ":cc-compiler-amd64",
    "@x86_64_unknown_linux_gnu_gcc_730//:compiler_components",
    ],
)

有人可以在这里为我解释@符号吗?

2 个答案:

答案 0 :(得分:5)

这是引用远程存储库。

在文档中,depending on other Bazel projects

local_repository(
    name = "coworkers_project",
    path = "/path/to/coworkers-project",
)
     

如果您的同事有目标//foo:bar,则您的项目可以引用该目标   为@coworkers_project//foo:bar

另请参见工作区规则中的design doc of remote repositorybind example

答案 1 :(得分:0)

在Bazel中,目标由标签引用。

挡板标签具有以下格式:

@repoName//packageName:target

例如,在myRepo中找到的以下软件包中:

 myRepo
    ├── WORKSPACE
    ├── package1
    │  └── BUILD
    │  └── src
    └── package2
       ├── BUILD
       └── src

myTarget中称为package1/BUILD的目标可以全局标记为@myRepo//package1:myTarget。 如果从同一个仓库中引用,例如从package2/BUILD中引用,则可以省略@myRepo前缀,并且可以使用//package1:myTarget。 如果从同一包中引用,例如在package1/BUILD中的另一个目标中引用,则可以省略包名称,并且可以使用:myTarget。如果冒号不会引起名字混淆,也可以省略。此类简短形式的标签不应与名称混淆。标签以“ //”或“:”开头。但是名字永远不会。例如,第一个软件包的名称为package1,但其标签为//package1

参考:https://docs.bazel.build/versions/master/build-ref.html

相关问题