1

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

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

它们被定义为:

gtest.构建:

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 关于外部依赖项的文档,
但我无法弄清楚我遗漏了什么。有什么想法吗?

我看了看里面$(bazel info output_base)/external
但我没有看到任何 m 构建的依赖项。

4

1 回答 1

1

您当前工作空间中的任何内容都可能不//...依赖于 中的任何目标@gtest//...,因此运行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//:mainbazel 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
于 2018-07-17T20:55:57.523 回答