在Bazel中,可以使用visibility
属性来限制共享库的可见性,从而避免混淆共享库的名称。以下是一个示例解决方案:
# //my_library/BUILD
cc_library(
name = "my_library",
srcs = ["my_library.cc"],
hdrs = ["my_library.h"],
visibility = ["//visibility:public"], # 设置可见性为公开
)
# //my_target/BUILD
cc_binary(
name = "my_target",
srcs = ["my_target.cc"],
deps = ["//my_library:my_library"],
)
# //visibility/BUILD
package(default_visibility = ["//visibility:private"])
visibility(
name = "public",
visibility = ["//..."], # 设置所有目录下的目标可见性为公开
)
visibility(
name = "private",
visibility = [], # 设置所有目录下的目标可见性为私有
)
在这个示例中,my_library
被设置为//visibility:public
,所以它的名称不会被混淆。my_target
依赖于my_library
,因此可以正确引用它。
通过使用visibility
属性和可见性规则,可以控制共享库的可见性,避免混淆共享库的名称。