Bazel 是否需要外部存储库 BUILD 文件位于 $WORKSPACE_ROOT/external 中?

Does Bazel need external-repo BUILD files to be in $WORKSPACE_ROOT/external?

我用这个为 glfw 创建了一个存储库:

load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository")

new_git_repository(
  name = "glfw",
  build_file = "BUILD.glfw",
  remote = "https://github.com/glfw/glfw.git",
  tag = "3.2.1",
)

我将 BUILD.glfw 放在 WORKSPACE 根目录中。当我建造时,我看到:

no such package '@glfw//': Not a regular file: [snipped/external/BUILD.glfw

我将 BUILD.glfw 移动到 external/BUILD.glfw 并且它似乎有效,但我找不到关于此的文档。关于 new_git_repository 的文档说 build_file “...是相对于主工作区的标签。”;我在那里没有看到任何关于 'external' 的信息。

这是由于 new_git_repository 的原生版本和(较新的)Skylark 版本之间的语义差异不一致。要使用原生的new_git_repository、comment/remove加载语句:

# load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository")

假设 new_git_repository 与 http_archive 存在相同的问题,根据 Bazel 问题 6225 您需要将 glfw 的 BUILD 文件引用为 @//:BUILD.glfw