Bazel学习笔记之基本概念
1. Bazel 概述
在各种开发语言流行的今天,每个开发语言都对应了一个自己的构建工具。因此在各种语言切换进程开发时构建工具的学习也是件麻烦的事情,当然很多高级语言开发都有现成的IDE(集成了构建工具),这样使得我们减少了学习成本,但是有时候难免有需求要修改或了解构建工具更深层此的原理。这个时候岂不是要学很多构建不同种类的构建工具知识!这个时候Bazel就登场了,请诸君细细看来。
Bazel说到底是一个构建和测试工具还是开源的(厉害不哈哈哈),但是它去支持多种语言的构建C++、JAVA、Android及iOS并支持跨平台构建。
2. Bazel的优势
- 高级构建语言: Bazel使用抽象的、人类可读的语言在高语义级别描述项目的构建属性。 与其他工具不同,Bazel 对库、二进制文件、脚本和数据集的概念进行操作,免于编写对编译器和链接器等工具单独调用的复杂性。
- Bazel快速可靠: Bazel会对以及进程过的工作进行缓存并跟踪文件内容和构建命令的更改。 通过这种方式,Bazel知道什么时候需要重建什么东西,并且只重建那个。
- Bazel支持多平台: Bazel可以在 Linux、macOS 和 Windows 上运行。 Bazel也可以从同一个项目为多个平台(包括桌面、服务器和移动设备)构建二进制文件和可部署包
- Bazel scales: 不知到如何翻译scales。Bazel在处理超数十万个源文件构建时仍然高效。 它适用于数以万计的多个存储库和用户群。
- Bazel 可扩展: 支持多种语言,可以扩展 Bazel 以支持任何其他语言或框架
3. 应该如何使用Bazel
- 毋庸置疑的第一步安装
- 设置项目工作区(workspace),这是Bazel查找构建输入和BUILD文件以及存储构建输出的目录
- 编写一个BUILD文件
- 运行 Bazel(从命令行中),构建内容默认被输出到workspace中
4. Bazel执行流程
在运行构建或测试时,Bazel 会执行以下操作:
- 加载与目标相关的 BUILD 文件
- 分析输入及其依赖关系,应用指定的构建规则,并生成一个动作图
- 对输入执行构建操作,直到生成最终构建输出
4.1 动作图
动作图表示被构建内容它们之间的关系以及Bazel将执行构建操作。 借助此图,Bazel 可以跟踪文件内容的更改以及操作(例如构建或测试命令)的更改,并了解之前已完成哪些构建工作。 该图还能够轻松跟踪代码中的依赖关系。
5. Bazel 中的核心概念
5.1 Workspace
一个构建工程中包含一个WORKSPACE文件用于标识Bazel的工作区
5.2 Package
workspace中的包含BUILD文件的目录是一个包
接下来会基于C++项目的构建学习Bazel
参考:
https://docs.bazel.build/versions/4.2.1/bazel-overview.html
欢迎大家关注「CoderPro」公众号,请大家多多支持、多多关照/(ㄒoㄒ)/~~