我的项目如下结构:
$ 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
?
答案 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
文件的第一行。