1.Introduction介绍
bazel从有WORKSPACE文件的源代码目录构建软件。在一个workspace中的资源文件被组织成packages,一个package是一个包含相关资源文件和BUILD文件的目录,BUILD文件指定如何从资源中编译软件。
2. Workspace, Package and Targets
2.1 workspace
workspace指的是你想要构建的资源的软件目录,WORKSPACE可以空,也可以包含workspace rules.
2.2 Package
workspace的基础单元就是package,一个package是一个包含相关资源文件和BUILD文件的目录,更直观的理解,他就是WORKSPACE下的第一级包,再下层就不是了。package的作用在于你可以指定它的可见性,如
package(default_visibility = ["//visibility:public"])
2.3 Targets
一个package就相当于一个容器,package里面的内容被称为targets。大多数targets都属于以下这两种类型: files或者rules。除此之外,还有一种类型的target,被称之为package group,但是它的数量很少。
files又被分为两种类型,source files(即资源文件)是由编程人员写的完成特定任务的文件,他们被提交到代码仓库。generated files,是由构建工具根据规则生成的特定文件。
rule指定输入文件和输出文件之间的关联,rule中的输出文件一定是generated 文件, rule中的输入文件可能是source或者generated文件。这很容易理解,因为规则的依赖项可能是已经构建好的规则的输出结果。
2.4 Labels
所有的targets都属于一个唯一的package,target的名字被称为label,典型的label如下:
//my/app/main:app_binary
一个label由两部分组成,一个是package name(my/app/main),另一个是target name
(app_binary),每一个label唯一的指向一个targets,//代表从WORKSPACE所在目录开始
一种特殊情况(//my/app 和//my/app:app等价 :app 和 app等价)
3.Rules
rules规定输入和输出之间的关联,下面主要介绍针对Python的bazel rules
首先,每个rule都有一个name属性,你最好好好的定义它,使得下一个编码人员可以看懂你写的
意思。这一点在py_binary和py_test中尤为重要。每个规则都有自己对应的属性。
srcs: 属性表示所指定的label的列表,实际上就是要编译的资源文件的列表
outs: 表示输出label的列表, 他与srcs属性相似但有两个不同的地方,
没有评论:
发表评论