什么是bazel
Bazel 是一款与 Make、Maven 和 Gradle 类似的开源构建和测试工具。 它使用人类可读懂的高级 build 语言。Bazel 支持使用多种语言的项目,并针对多个平台构建输出。Bazel 支持跨多个代码库和大量用户的大量代码库。
Bazel的基本概念
WORKSPACE file
在构建项目之前,我们需要先设置工作区,工作区的作用是存储项目的源文件和Bazel的构建输出的目录,其中WORKSPACE file就是将目录及其内容标识为Bazel工作区的文件,需要位于项目目录结构的根目录下,该文件可以为空,但是通常包含从网络或者本地文件系统中提取其他依赖项的外部代码库声明。
BUILD file
一个项目中包含一个或多个BUILD file,BUILD主要用于告知Bazel如何构建项目,工作区包含一个BUILD文件的目录就是一个软件包。在之前的文章提到过,Bazel是基于工件的构建系统,而工件就可以理解为Bazel根据Build文件中的编译规则编译该目录下的文件形成的,软件包可以包含子软件包或包含BUILD文件的子目录,从而形成软件包的层次。
BUILD文件中包含了一些适用于Bazel的不同类型的指令,每个BUILD文件都需要包含至少一条规则(如cc_library)作为一组指令,以指示Bazel如何构建所需要的输出,例如可执行文件或库。BUILD文件中的每一个build规则实例都称为目标,并指向一组特定的源文件和依赖项,一个目标也可以指向其他目标。以下就是一个简单的BUILD文件的例子。
cc_binary(
name = "hello-world",
srcs = ["hello-world.cc"],
)
在本示例中,hello-world 目标会实例化 Bazel 的内置 cc_binary rule。该规则会告知 Bazel 从 hello-world.cc 源文件构建不含依赖项的独立可执行文件。
Bazel的C++事例
该例子是Bazel官方提供的,github地址为git clone https://github.com/bazelbuild/examples
单个目标,单个软件包
我们从最简单的例子开始,例子只包含一个源文件,需要将改源文件构建成一个可执行文件,其文件目录如下。
examples
└── c