多个Bazel BUILD文件出错:“目标'栏'在目标'foo'中不可见”

时间:2016-04-30 11:12:34

标签: bazel

我的项目如下结构:

$ 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 个答案:

答案 0 :(得分:6)

来自Bazel docs

  

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

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

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

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

答案 1 :(得分:0)

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

使其起作用
package(default_visibility = ["//visibility:public"])

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