Bazel安装
官方网站:https://bazel.google.cn/install/ubuntu?eqid=e7fa38a100027fd200000002645856d3&hl=de
一、准备依赖与添加官方源(一次性)
# 1. 安装基础依赖
sudo apt update && sudo apt install apt-transport-https curl gnupg -y
# 2. 导入Bazel GPG密钥
curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel-archive-keyring.gpg
sudo mv bazel-archive-keyring.gpg /usr/share/keyrings/
# 3. 添加Bazel官方APT源(amd64)
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/bazel-archive-keyring.gpg] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
说明:
jdk1.8仅为历史保留字段,与实际 JDK 版本无关。如果网络问题导致GPG密钥导入失败,将上面更换为:
# 1. 安装依赖(确保已装)
sudo apt update && sudo apt install apt-transport-https curl gnupg -y
# 2. 用国内可访问的密钥地址(Google存储,非bazel.build)导入
curl -fsSL https://storage.googleapis.com/bazel-apt/doc/apt-key.pub.gpg | sudo gpg --dearmor -o /usr/share/keyrings/bazel-archive-keyring.gpg
# 3. 添加清华Bazel APT源(国内最快)
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/bazel-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
二、安装 Bazel(最新稳定版)
sudo apt update && sudo apt install bazel -y
- 安装指定版本(如 6.4.0):
sudo apt install bazel-6.4.0 - 版本会安装为
/usr/bin/bazel-6.4.0,bazel软链接指向最新版
三、验证安装
bazel --version
输出示例:bazel 8.5.0 即成功
四、升级 Bazel
sudo apt update && sudo apt upgrade bazel -y
bazel 特性
一、Bazel 最大的 4 个核心优势(最关键)
1. 自动管理所有依赖,不用本地装库
- 不需要手动安装 Protobuf、Eigen、Boost、OpenCV 等
- 不需要配置头文件路径、库路径
- 不需要处理版本冲突
- 所有依赖 Bazel 自动下载、自动编译、自动链接
2. 构建速度极快:缓存 + 增量编译 + 分布式编译
Bazel 是世界上构建速度最快的构建系统之一。
- 秒级增量编译(改一行代码,只重新编译这一行)
- 跨机器、跨用户共享缓存
- 支持分布式编译(几十台机器同时帮你编译)
大型 C++ 项目:
- Make/CMake:可能要 10 分钟
- Bazel:10 秒~1 分钟
3. 多语言统一构建系统
一个工具搞定所有语言:
- C++
- Java
- Go
- Python
- Rust
- Protobuf
- Android / iOS
一个项目,前后端、客户端、服务端都用同一个 Bazel 构建。
4. 跨平台、可移植、一次编写到处运行
- Linux
- macOS
- Windows
- Docker
- 云端编译环境
完全相同的一套 BUILD 文件,所有平台都能编译。
不会出现:
- "我本地能跑,服务器不能跑"
- "Windows 正常,Linux 报错"
二、Bazel 的核心特性(专业但重要)
1. 严格的依赖模型(不会出现诡异编译错误)
Bazel 要求你明确声明所有依赖。
好处:
- 不会隐式依赖系统文件
- 不会出现 "漏链接库"
- 不会出现 "时好时坏" 的编译问题
- 构建结果 100% 可复现
2. 真正的沙盒环境(干净构建)
Bazel 在隔离沙盒里编译:
- 只能访问你声明的依赖
- 不能偷偷访问系统文件
- 不能访问网络
- 构建结果完全确定
这让 C++ 项目极度稳定。
3. 自动处理代码生成(Protobuf 等)
如项目中使用protobuf:
.proto→ 自动生成 C++ 代码- 无需手动写脚本
- 无需配置 protoc 路径
- 变更 proto 自动重新生成
所有代码生成工具 Bazel 都能完美管理。
4. 支持超大型代码库(单仓模式)
Google、微软、Meta 都用单仓(monorepo):
- 几十万源文件
- 几百个模块
- 上千个开发者
Bazel 就是为这种巨型项目设计的。
5. 内置测试支持
一行命令跑所有测试:
bazel test //...
- 自动并行跑测试
- 缓存测试结果
- 自动检测哪些代码变了,只重跑受影响的测试
三、Bazel vs Make/CMake(最直观对比)
| 特性 | Make / CMake | Bazel |
|---|---|---|
| 本地安装第三方库 | 必须手动装 | 完全不用 |
| 增量编译 | 慢、不可靠 | 极快、可靠 |
| 跨平台 | 麻烦、经常出错 | 简单、一致 |
| 依赖管理 | 手动配置 | 自动管理 |
| 构建缓存 | 无 | 强大 |
| 适合大型项目 | 吃力 | 天生支持 |
| 环境一致性 | 差 | 极高 |
四、最适合用 Bazel 的场景
- C++ 大型项目、机器人、自动驾驶、游戏引擎
- 需要多语言混合(C++ + Go + Python)
- 团队协作,希望环境统一
- 不想处理 "编译环境问题"
- 希望项目换一台电脑就能编译