bazel简介(二)——从makefile向bazel转变(使用genrule)
0x01 背景 上篇中已经介绍了bazel的基本工作原理和相关的概念。这篇将继续介绍下,现有的makefile构建工程如何切换到bazel构建系统。 bazel提供了丰富的扩展方式,当然也支持从目前的makefile过渡到bazel构建。 再次说明下其特性: 多语言支持,并且支持扩展到任何语言的构建。 扩展DSL是starlyke语言,为Python的一个子集,容易上手。这一点是cmake和其他构建系统不具备的。 支持缓存。 支持分布式构建。 支持最小化构建。 在一个大型系统中,一个人可能只需要负责其中的一个小组件,这个组件可能又依赖其他组件。当这个组件需要更新测试时,只希望去构建这个组件依赖的组件和这个组件本身,其他不相关的可以不构建,这样可以使用构建过程更快捷。bazel就支持这种方式。 0x02 makefile的问题 上文中说过makefile在处理小规模软件时还不错,当规模增大时,makefile有以下问题。 各个组件之间的依赖难以管理。 makefile只支持将所有的源码放在一个目录下,然后由顶层的。 这个依赖关系只能是有经验的人知道,新人想最小化编译时,只能试错,发现有依赖未构建时,再去手动构建。 增量式构建难以控制。 这一点和第1点是相关的,因为依赖不能自动化构建,所以增量式构建也不具备。 构建速度不足,难以做缓存。 makefile本身不支持缓存