bazel fetch //... 对 BUILD 和 WORKSPACE 文件不执行任何操作

bazel fetch //... does nothing for BUILD and WORKSPACE files

我无法让 bazel 下载和构建外部依赖项。

也许我在这里遗漏了一些明显的东西,
但让我们以 gtest 为例。
在我工作区的根目录下有一个 gtest.BUILDWORKSPACE

它们被定义为:

gtest.BUILD:

cc_library(
    name = "main",
    srcs = glob(
        ["src/*.cc"],
        exclude = ["src/gtest-all.cc"]
    ),
    hdrs = glob([
        "include/**/*.h",
        "src/*.h"
    ]),
    copts = ["-Iexternal/gtest/include"],
    linkopts = ["-pthread"],
    visibility = ["//visibility:public"],
)

工作空间:

new_http_archive(
    name = "gtest",
    url = "https://github.com/google/googletest/archive/release-1.7.0.zip",
    build_file = "gtest.BUILD",
    strip_prefix = "googletest-release-1.7.0",
)

我尝试在我的其他代码中使用 gtest,但是外部依赖不存在。
当我 运行 bazel fetch //... 它什么都不做。

我正在尝试遵循 bazel 关于 external dependencies
的文档 而且我无法弄清楚我遗漏了什么。有什么想法吗?

我看了里面$(bazel info output_base)/external,
但我在那里没有看到任何内置的依赖项。

您当前的工作区 //... 中可能没有任何内容依赖于 @gtest//... 中的任何目标,因此 运行ning bazel fetch //... 不会告诉 Bazel 它需要下载 @gtest.

$ bazel fetch //...
Extracting Bazel installation...
Starting local Bazel server and connecting to it...
...........
$

如果您尝试直接 运行 bazel fetch @gtest//...,它将按预期下载存档:

$ bazel fetch @gtest//...
INFO: SHA256 (https://github.com/google/googletest/archive/release-1.7.0.zip) = b58cb7547a28b2c718d1e38aee18a3659c9e3ff52440297e965f5edffe34b6d0
Building: no action

现在,如果您再次添加依赖于 @gtest//:main 和 运行 bazel fetch //... 的目标,它将下载 @gtest:

$ bazel clean --expunge
INFO: Starting clean (this may take a while). Consider using --async if the clean takes more than several minutes.

$ cat BUILD
filegroup(
    name = "gtest",
    srcs = ["@gtest//:main"],
)

$ bazel fetch //...
Starting local Bazel server and connecting to it...
..........
INFO: SHA256 (https://github.com/google/googletest/archive/release-1.7.0.zip) = b58cb7547a28b2c718d1e38aee18a3659c9e3ff52440297e965f5edffe34b6d0
Building: no action

$ ls $(bazel info output_base)/external
bazel_tools  @bazel_tools.marker  gtest  @gtest.marker  local_config_cc  @local_config_cc.marker