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

参考技术A

1、加载和目标相关的 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: 规则可见性的主要内容,如果未能解决你的问题,请参考以下文章

go语音基础之可见性规则验证

1 Java线程的内存可见性

原子性、可见性、有序性

java多线程进阶可见性

7.三大性质总结:原子性可见性以及有序性

Java并发基础Java内存模型解决有序性和可见性