简介
Bazel是Google开源的编译构建工具,以Monolithic Repository为理念。
与makefile & CMake不同,Bazel另起炉灶,采用client/server运行模式,为云编译而生。
Bazel工具将编译过程分三个阶段:Load Phase/Analysis Phase/Execution phase。
研发人员实现workspace/build/.bzl三种文件,Bazel执行这些文件生成action graph,执行action来构建项目。
Bazel优点:
- 多语言支持
- client/server模式,云编译
- 非常方便的处理依赖:用户可声明依赖的地址、版本、构建规则,Bazel自动下载对应版本的依赖,并根据规则构建对应依赖的target。
- 优秀的缓存:增量编译非常快速
缺点:
- 开源社区资源匮乏(目前搜索bazel编译c++相关问题,大多跟tensorflow相关)
- 工具庞大,用户上手难度高
- 工具灵活性较低,对用户约束较多。比如:
- target使用的所有头文件都需要显式地声明(尽管支持glob)
- gen_rule(调用自定义功能:shell等)所有输入和输出文件都需要显式声明
- 对其他模块的依赖,只能以其整个库为形式,不能直接将其源码作为本模块target的源码使用
- 对IDE很不友好,其下载的依赖模块以及编译的中间产出,会存放到./bazel-module/和~/.cache,而且目录层次很深
- 依赖git仓库时,其git信息会被bazel删除。用户难以实现保存依赖的git信息
更多介绍请参考:大型C++工程的构建技术:Modern CMake vs Bazel
安装
我使用的二进制安装包,安装过程很简单。
下载包:bazel-4.0.0-installer-linux-x86_64.sh。
执行以下流程(已经安装有依赖的可省略):
sudo apt install g++ unzip zip
# Ubuntu 16.04 (LTS) uses OpenJDK 8 by default:
#sudo apt-get install openjdk-8-jdk
# Ubuntu 18.04 (LTS) uses OpenJDK 11 by default:
sudo apt-get install openjdk-11-jdk
chmod +x bazel-<version>-installer-linux-x86_64.sh
sudo ./bazel-<version>-installer-linux-x86_64.sh
ok,安装完毕,如下图:
当然还有很多安装方式,参考官网:https://docs.bazel.build/versions/master/install-ubuntu.html
国内下载源
安装简单,下载难啊。
尝试在github下载,坚持了重试了5次,一天时间过去了,还是没下载好。放弃。
国内下载1分钟搞定:https://mirrors.huaweicloud.com/bazel/4.0.0/
感谢华为云。