Bazel Build: 规则可见性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bazel Build: 规则可见性相关的知识,希望对你有一定的参考价值。
参考技术A 为了更好地控制包(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 配置。
初探 Bazel
参考技术A1、加载和目标相关的 BUILD 文件;
2、分析输入及其依赖,应用指定的构建规则,产生一个Action图。这个图表示需要构建的目标、目标之间的关系,以及为了构建目标需要执行的动作。Bazel依据此图来跟踪文件变动,并确定哪些目标需要重新构建;
3、针对输入执行构建动作,直到最终的构建输出产生出来;
bazel中对于文件架构的概念有两个: workspace 和 package 。
官网 : https://bazel.build/
1、安装 bazel
2、创建工作空间
Bazel从此工作空间寻找构建输入和BUILD文件,同时也将构建输出存放在(指向)工作空间(的符号链接中)
3、编写BUILD文件
4、从命令行调用Bazel命令,构建、测试或者运行项目
[1] https://fuhailin.github.io/Bazel-Starter/
[2] https://www.cnblogs.com/jojodru/p/7744630.html
[3] https://zhuanlan.zhihu.com/p/336907030
[4] https://blog.gmem.cc/bazel-study-note
以上是关于Bazel Build: 规则可见性的主要内容,如果未能解决你的问题,请参考以下文章