当前位置: 首页 > news >正文

bazel编译系统(TODO)

(TODO)

1 简介

Bazel 是Google 开源的多语言、大规模代码库构建 / 测试工具,前身是 Google 内部自研构建系统Blaze(2007 年开发),2015 年开源命名 Bazel,2019 年正式稳定版发布。 定位:替代 Make、CMake、Gradle、Maven,主打超大单体仓库 (Monorepo)、多语言、跨平台、可复现、极速增量构建

目前谷歌全系开源项目原生采用 Bazel,代表有 TensorFlow、gRPC、Protobuf、新版 AOSP,Envoy、Redpanda 等云原生中间件、百度 Apollo 自动驾驶、brpc 也基于 Bazel 构建;海外大厂 Uber、Spotify、Stripe 用它统一管理多语言单体仓库,国内微信后台、网易游戏引擎、高通车载 BSP、地平线芯片固件同样落地 Bazel。

Bazel 集中用于多语言大仓库、车载嵌入式、AI 框架、微服务基础设施这类对构建一致性、远程缓存、并行编译要求高的项目;小型单语言项目、Chrome 等传统桌面工程大多不选用,部分项目也曾因配置维护成本中途弱化或移除 Bazel。

特点:

1 所有依赖必须显式声明,禁止隐式依赖。
2 每一步构建动作输入输出完全可追踪,天然支持缓存、沙箱隔离。

优势:

1 按单个文件 + 编译参数做内容哈希,而非文件修改时间。只重编真正变更及其依赖,百万行代码库改动单个头文件也毫秒判断需重编范围。

2 本地缓存:本机复用历史构建产物;
远程缓存:团队 / CI 共享集群缓存,多人开发、流水线大幅提速;
只要输入完全一致,任意机器直接拉取编译结果,无需重复编译。

3 沙箱隔离:构建过程只能读取显式声明的文件,禁止读取系统全局头文件、环境变量;
所有第三方依赖带哈希校验,同一套代码在 Linux/macOS/Windows/CI 产出二进制完全一致。

4 Action Graph 自动识别无依赖任务并行编译;支持把编译任务分发到云端构建集群,多核/多机器同时跑,超大型项目编译数十倍提速。

5 一套 BUILD 语法同时管理C/C++/Java/Python/Go/Android/iOS;
bazel test统一执行所有单元 / 集成测试,内置测试结果缓存、失败重跑、日志收集。

2 构建流程

1 加载阶段 Load
读取 WORKSPACE、所有 BUILD 文件,解析外部依赖、目标定义。
2 分析阶段 Analyze
遍历所有 Target,解析 srcs/hdrs/deps,生成一张完整 Action Graph(动作图):每个编译 / 链接 / 测试都是独立 Action,记录全部输入文件、编译参数、输出产物哈希。
3 执行阶段 Execute
沙箱隔离执行每个 Action,不污染本地环境;
对比输入哈希,仅执行变更 Action;
命中本地 / 远程缓存直接复用产物,跳过编译。

常用命令:

# 构建目标 bazel build //src:main_app # 构建当前目录所有目标 bazel build :all # 运行可执行文件 bazel run //src:main_app # 执行所有测试 bazel test //tests/... # 查询依赖图 bazel query deps(//src:main_app) # 清理构建缓存 bazel clean # 彻底清空所有外部依赖缓存 bazel clean --expunge

3 简单例子

Bazelisk(不用手动装固定版本,工程自带)
项目根目录放 bazelisk 脚本,运行时自动下载项目指定版本 Bazel,不用本地提前安装。

./bazelisk build //:hello

目录结构

demo/

├── WORKSPACE # 工作区标记文件,空文件即可

├── BUILD.bazel # 构建规则

└── main.c # C源码

main.c

#include <stdio.h> int main() { printf("Hello Bazel C!\n"); return 0; }

BUILD.bazel

cc_binary( name = "hello", srcs = ["main.c"], )

编译命令:

# 编译 bazel build :hello # 直接运行 bazel run :hello
http://www.jsqmd.com/news/1112784/

相关文章:

  • DVWA从入门到精通(二):Brute Force(暴力破解)
  • 从Jupyter到生产:MLOps模型服务化实战指南
  • sp.net core + ef core 实现动态可扩展的分页方案
  • python: Steady-State Pattern
  • P45 创建三级类目树形数据结构
  • Hive 的四表类型
  • 从API到Agent:万字长文洞悉LangChain工程化设计
  • 基础知识-ISO模型常见协议和每一层作用
  • 突破性Book118文档下载器:一站式免费获取完整PDF的终极方案
  • PostgreSQL 数据误删恢复技术指南
  • 网站关键词SEO排名是什么意思?
  • Claude Code 实战指南:AI 代码助手如何提升 Python Flask 开发效率
  • 酷安UWP桌面版:在Windows上畅享酷安社区的完整体验
  • Insta360 AI剪辑技术解析:从语义理解到智能成片
  • Honey Select 2专业增强套件:自动化翻译、去码与高级插件配置实战指南
  • 程序代码行数统计脚本
  • 【Linux】章11 管理网络安全(RH134知识点问答题)
  • 理论都会,实战就废?7个分析模板,帮你打通任督二脉
  • 机器学习模型生产部署:从服务化到漂移监控的四层实战体系
  • 三进制太玄经·八十一首(坤至乾·每行一卦·配原文)
  • 从Hello World到部署上线,ChatGPT辅助编程全流程拆解,含17个避坑清单与3个私藏Prompt模板
  • 2026年企业安全基建的误区、重构与最优解
  • 从0开始学AI Agent:设计一个coding agent,Java佬必看
  • 郴州火锅排行榜|客观实测,理性就餐选型指南
  • 开源AI创作工作台infinite-canvas:一站式可视化无限画布部署与使用指南
  • AutoRaise终极指南:3分钟实现macOS鼠标悬停自动激活窗口,提升300%工作效率
  • 推算术:中华传统阴阳数理思维的文化探析
  • AOT 的使用以及 .NET 与 Go 互相调用
  • 从对话到行动:基于LangChain构建AI Agent的实战指南
  • ASP.NET Core Kestrel服务器HTTPS配置与传输安全加固实战指南