多个Bazel BUILD文件出现错误:“从目标'foo'无法看到目标'bar'”

14

我的项目结构如下:

$ tree
.
├── bar
│   ├── bar.cpp
│   └── BUILD
├── BUILD
├── foo.cpp
└── WORKSPACE

./BUILD的内容:

cc_binary(
    name = "foo",
    srcs = [ "foo.cpp" ],
    deps = [ "//bar" ],
)

bar/BUILD 的内容:

cc_library(
    name = "bar",
    srcs = ["bar.cpp"],
)

如果我构建foo,就会出现以下错误:

Target '//bar:bar' is not visible from target '//:foo'. Check the visibility declaration of the former target if you think the dependency is legitimate.

我需要做什么,以便解决依赖项并成功构建 foo?

2个回答

11

visibility = ["//__pkg__"]对我没起作用。 但是我成功地使其工作了,通过添加

package(default_visibility = ["//visibility:public"])

作为bar/BUILD文件的第一行。

10
Bazel文档中得知:
然而,默认情况下,构建规则是私有的。这意味着它们只能被同一BUILD文件中的规则引用。 [...] 您可以通过添加visibility = level属性,使规则对其他BUILD文件中的规则可见。
在这种情况下,bar/BUILD应如下所示:
cc_library(
    name = "bar",
    srcs = ["bar.cpp"],
    visibility = ["//__pkg__"],
)

附加的一行 visibility = ["//__pkg__"] 允许当前 WORKSPACE 中的所有 BUILD 文件都可以访问目标 bar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接