[bazel]-导读

Change log

目录

[bazel]-导读
[bazel]-概念和术语
[bazel]-bazel的使用
[bazel]-tulsi的使用
[bazel]-如何编译
[bazel]-缓存
[bazel]-影响缓存命中的因素
[bazel]-优化
项目地址

一.演变过程

在小工程的时候.所有代码都在一个仓库里修改.没什么问题.
但是当团队越来越大.项目代码越来越多.就导致了两个问题.

问题:
1.编译过慢
2.多人协作导致的Git冲突

演变一: Carthage

将整个工程拆分成多个仓库.每个仓库都是一个Framework.
每个小组维护一个仓库.
每个小组也只需关心这一个仓库.对其他仓库的依赖都用二进制依赖.
大大加快编译速度.
代表工具: Carthage.

问题:
每个库之间的依赖会变得错综复杂.
可能底层升了一个版本号.所有上层库都需要作出修改.

演变二: bazel

不把每个库拆分成小仓库了.
所有库都在一个Git仓库中.
通过bazel拆分成多个package.
每个package的编译缓存都是独立的.
解决了编译过慢的问题.

虽然在同一个大仓库里.
但是每组各自维护自己的package.
所以不会导致不同组之间的git冲突

解决:
解决了编译过慢问题
解决了库之间依赖问题
解决了多人协作导致的git冲突

二.bazel基本认识

bazel

bazel是基于工作区(WORKSPACE)来工作的.
在这个工作区里包含所有的源代码.
这些源代码被分为N个package
每个package都有一个BUILD文件来指定这个包的构建规则.

如下图.在工作区(WORKSPACE)下可以有多个项目如universal_target和ipad_target
还有多个package.如GXLive; GXLiveBase; GXPhone; GXPhoneBase.
这些package就是一个个独立的业务方.每个业务组维护自己的package.
他们每个都是独立的.但是可以相互依赖.

image.png

通过BUILD文件bazel可以帮我们将所有的源代码.资源编译成二进制.最终生成一个可执行文件.

每个开发人员运行程序的时候.bazel都会把运行出的输出文件上传到服务器作为缓存.
这样其他开发人员在运行项目的时候就可以直接使用服务器的缓存文件.
大大加快编译速度.

tulsi

但是这些文件里是不包含.xcodeproj文件的.那我怎么用Xcode打开我的工程呢.
Google给我们提供了tulsi工具.可以帮我们通过WORKSPACE和BUILD文件创建一个.xcodeproj文件.

下一篇:[bazel]-bazel的使用

推荐阅读更多精彩内容