bazel编译tensorflow

简介

什么是Bazel?

Bazel是一种用于软件自动化构建和测试的工具

为什么要用Bazel?

Bazel是一个类似于Make的编译工具,是Google为其内部软件开发的特点量身定制的工具,如今Google使用它来构建内部大多数的软件。Google认为直接用Makefile构建软件速度太慢,结果不可靠,所以构建了一个新的工具叫做Bazel,Bazel的规则层级更高。

Bazel的核心理念是:

  • 把一个项目分成若干个packages,在每个packages目录下需要放一个构建文件,包括这个包的信息。一个package中除了规则文件外,其余的文件,目录以及子packages都叫“targets”。
  • packages里要写明依赖关系,Bazel会知道哪些需要重新编译(只会编译修改后的包,及那些依赖于修改包的包)
  • 判断一个变化是否是包内部的变化。举例,在一个库中新增了一个helper函数,对于那些依赖于这个库的包,我们无需去重建,这就是内部变化;而要是改变了这个库的一个方法名称,这时候就要重建那些包了。

怎样用Bazel?

bazel构建函数

1
2
3
# target: BUILD文件中的每一条编译指令被称为一个target,它指向一系列的源文件和依赖,一个target也可以指向别的target。
- cc_binary: Binary rules
- cc_library: Library rules

Bazel是怎样工作的?

bazel的作用

1
2
3
4
5
6
7
8
9
# 从github下载tensorflow源代码
git clone --recursive https://github.com/tensorflow/tensorflow

## 进入根目录后编译
# 编译生成.so文件, 编译C++ API的库 (建议)
bazel build //tensorflow:libtensorflow_cc.so

# 也可以选择,编译C API的库
bazel build //tensorflow:libtensorflow.so

扩展阅读