10

我的项目结构如下:

$ 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"],
)

如果我 build 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成功构建?

4

2 回答 2

8

visibility = ["//__pkg__"]对我不起作用。但我设法通过添加使其工作

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

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

于 2019-12-16T12:06:24.733 回答
8

来自Bazel 文档

但是,默认情况下,构建规则是私有的。这意味着它们只能被同一个 BUILD 文件中的规则引用。visibility = level[...]您可以通过添加属性使规则对其他 BUILD 文件中的规则可见。

在这种情况下,bar/BUILD应该如下所示:

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

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

于 2016-04-30T11:12:34.170 回答