xiedeacc
发布于 2023-12-24 / 26 阅读
0
0

bazel那些事——序

目录

  1. bazel那些事——序
  2. bazel那些事——安装、概览、常用命令
  3. bazel那些事——一个完善bazel项目需要的元素
  4. bazel那些事——C/C++ demo
  5. bazel那些事——Python demo
  6. bazel那些事——Java demo
  7. bazel那些事——Andriod demo
  8. bazel那些事——iOS demo
  9. bazel那些事——编译工具链配置
  10. bazel那些事——编写规则
  11. bazel那些事——常见项目和规则

一、bazel是什么

bazel是google开源的一个类似于maven、gradle、cmake、meson的构建工具。

二、bazel解决了什么问题

构建工具万万千,即使C/C++,都存在make、cmake、meson、ninja、xmake......,那bazel能解决什么问题呢?

  1. 能有效解决C/C++没有包管理的历史,相对于conna,bazel使用全源码方式,更适合开发者。rust比C/C++包管理好用,这点将很快成为历史
  2. 能将C/C++尽可能的以最小集编译和验证,有包的概念,某种程度上实现了C++20的module功能。如果对C++开发有较深的理解,这个极大了提高了开发和验证效率
  3. 集成了测试系统
  4. 跨平台,也可以很方便交叉编译
  5. 提供了starlark类python脚本语言,可以非常容易、便捷的创建出规则满足任意需求,写了这么多年C++,makefile和cmake的语法目前还法熟练
  6. 多语言支持,由于规则非常灵活,事实上可以提供任意语言的构建,未来有望一统构建
  7. 生态较为完善,目前已经有很多开源项目和大公司采用bazel作为构建工具,不仅仅局限于C/C++,很多公司开始将bazel应用于iOS/Android/Java等等
  8. 全源码编译方式,使得C++也可以像Java一样,本地构建,跑单测。结束了没有特定环境,就没法开发、运行的黑暗历史了。当然由于C++本身跨平台的问题,一个linux项目很可能是没法在window下构建的。但是最起码不再挑剔linux版本和编译器版本了。
  9. 支持构建缓存,远程缓存,增量构建

三、为什么选择bazel

上面讲了这么多bazel的功能,根据我在大型对性能要求极高的C++项目的经验,可以确定,目前bazel能满足大部分需求,能极大的提高开发效率和体验,建议新项目都采用bazel来作为构建方式。即使Android、Java、iOS这些构建工具已经比较完善的语言,新项目也应该选择bazel来构建,因为构建还要考虑构建工具统一性,增量构建,构建速度,流水线等一些列问题,而bazel能一站式解决这些问题。抛去历史和政治问题的话,bazel有一统构建工具的前景。因此为了避免以后迁移构建的工作,新项目都应该采用bazel来构建。

当然bazel当前还是有一些需要完善的地方,最大的问题就是成熟可靠的构建规则还没到能满足一切需求的地步。自己写构建规则的话,得看完整个bazel的文档,但是文档写的不够简练,上手比较困难。遇到一些非常特殊的需求的话,可能解决方式也没那么优雅。但是这一点不影响我们拥抱bazel,毕竟太好用了。

四、本系列文章的意义

bazel官方的文档大而全,但是太啰嗦,就好比C++有一本又一本的教材,但是没有一本教材聚焦于怎么快速上手,怎么清晰且简洁的把C++重点阐述出来。工作这么久以后,回头看C++ Primer都写的非常一般。

本系列文章专注于解决实际工作中问题,不探讨茴香豆有几种写法的各种tricky,追求切实理解和解决工作中会遇到的问题,不追求大而全。毕竟大而全,可以chatgpt,可以stackoverflow,可以google,可以github,完全没必要掌握方方面面,把工作中用到的90%的东西理解透才是王道,剩下10%有需要查资料就好了。

本系列文章将会关注bazel的方方面面,包括使用、常用的一些规则、怎么编写规则来满足一些特殊需求。力求把使用bazel过程中遇到的问题、一些理解,简单直白的写出来。读者要是有疑问的话,可以留言,一起讨论,我也会不断修改表达方式,来把问题讲清楚。

本人也提供bazel构建相关的有偿咨询


评论