天天看点

Bazel 4.0.0在Linux下的安装(附国内安装包下载源)

简介

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,安装完毕,如下图:

Bazel 4.0.0在Linux下的安装(附国内安装包下载源)
Bazel 4.0.0在Linux下的安装(附国内安装包下载源)

当然还有很多安装方式,参考官网:https://docs.bazel.build/versions/master/install-ubuntu.html

国内下载源

安装简单,下载难啊。

尝试在github下载,坚持了重试了5次,一天时间过去了,还是没下载好。放弃。

国内下载1分钟搞定:https://mirrors.huaweicloud.com/bazel/4.0.0/

感谢华为云。