Bazel Build: 规则可见性

Bazel Build: 规则可见性,第1张

为了更好地控制包(Package)对外发布的接口,及其细粒度地控制包之间的依赖关系,Bazel通过配置规则的 visibility 完成该功能,这是Bazel相对于其他构建工具的一大特色。

Bazel的可见性存在5中类型的精细化控制方法:

除非由 package 的 default_visibility 指定默认的可见性,否则默认为 //visibility:private 。

例如,在 //polyflow:BUILD 顶级文件中,定义了一个包集合,它表示当前工程下所有的包。

而在任意的一个包中,可引用该包集合,并赋予包的默认可见性。例如, //polyflow/core:BUILD 中,规则 model_id 的可见性对 //polyflow 下的所有包可见,包括它自己所在的包。

一般地,如果将测试与实现放在同一个包中,则测试目标能够引用到被测试目标。例如,目标 //cub/string:string_view 与目标 //cub/string:string_view_test 定义在同一个包中,测试目标可直接引用被测试目标。

如果违背了这个约定,将头文件、实现文件和测试文件分别放在 include 、 src 和 test 目录,这种风格将导致复杂的 Bazel 配置。

能用,如果包含了一个头文件,那么需要将头文件对应的库添基配加到依赖搏腔指中。

不过,只需有添加直接依赖的库。假设三明治对应的sandwich.h文件包含了面包对应的bread.h文件,同时bread.h又圆大包含了面粉对应的flour.h文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8180895.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存