[bazel]-概念和术语

Change log

目录

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

原文: https://docs.bazel.build/versions/master/build-ref.html

介绍

本文主要讲述Workspace. Packages. Targets(file; rule; package_group)都是些啥

Bazel在一个workspace(项目根目录)里构建软件.

workspace里的源文件以package(包)的嵌套层次结构来组织.

每个package(包)都是一个文件夹.里面包含了相关源文件和一个BUILD文件.

每个BUILD文件指定这个源文件可以构建出来什么样的输出.

Workspace, Packages and Targets

Workspace (根文件夹)

一个workspace就是一个project(项目)的根目录.

workspace里包含构建这个项目所需的源文件.以及symbolic links(符号链接).

每个workspace目录都必须有一个名为WORKSPACE的文件.

这个WORKSPACE文件可能是空的.

也可能包含构建项目所需的外部依赖.

(WORKSPACE文件怎么添加依赖请见Workspace Rules https://docs.bazel.build/versions/master/be/workspace.html)

Package (子文件夹)

在一个workspace中package是主要的代码组织单元.

一个package就是一个相关文件的集合.也是一个这些相关文件之间的规范.

一个package被定义为一个目录.这个目录里必须包含一个名为BUILD的文件.

package目录必须在workspace目录下.

package包含其目录中的所有文件.以及其下的所有子目录.

但是不包含那些包含了BUILD文件的子目录.

例子:
workspace为: GXShell根目录
package为: universal_target; GXLive; GXLiveBase; GXPhone; GXPhoneBase

image.png

target

package是一个容器.即目录.

他里面的元素被称为target.

target可以分为三类: file(文件)和rule(规则).package group(数量很少)

file

file进一步分类又可以分为两种:源文件和派生文件.

源文件通常就是程序员编写的类文件.会被上传到远程仓库.

派生文件是由编译器根据指定规则生成的文件.不会被上传到远程仓库.

例子:
如在universal_target这个package里的info.plist和main.m都属于file

image.png

rule

rule不是一个文件.
他是被保存在BUILD文件里的一个函数或者叫方法.
他是一个规则.
如下例子中universal_lib和universal都是一个rule.

1.rule指定输入和输出之间的关系.以及构建输出的步骤.
rule的输出始终是派生文件.
rule的输入可以是源文件.也可以是派生文件.
也就是说.rule的输出也可能是另一个rule的输入.Bazel允许构建长链规则.

2.rule的输入还可以包含其他rule.
即A rule可能有另一个B rule作为输入.
在编译期间B的头文件可用于A
在链接期间B的符号可用于A
在执行期间B的运行时数据可用于A

3.通过rule生成的文件始终属于该rule所属的package.
不能将生成文件放到另一个package里.
但是rule的输入却可以来自另一个package

4.每个rule都有一个name.由name属性指定.类型为string.
这个被你指定的名字将作为生成的文件的名称.
所以推荐名称可以遵守一定的规则: 如: _binary和_test.
让人看名字就知道你要生成的文件的作用.

5.每个规则都有一组属性.每个属性都是rule类里的函数.
每个属性都有一个名称和一个类型.
类型可以是: 整数; label; label列表; 字符串; 字符串列表; 输出label; 输出label列表.
在每个规则中不是每个属性都需要被实现的.即有的属性是可选的.

例子:
其中srcs这个属性会出现在很多rule里.
他的类型是label列表.
每个出现在这里的target都是该rule的输入文件.
如下"universal/mian.m"; "universal/AppDelegate.m"; "universal/ViewController.m"都是universal_lib这个rule的输入

image.png

例子:
如下universal和universal_lib各是一个rule
其中universal这个rule里就引用了universal_lib这个rule

image.png

package group

package group顾名思义就是一组package.
他的目的是限制某些规则的可访问性.
package group由package_group函数定义.
他有两个属性: 他包含的包列表及其名称.
唯一能决定他能否被引用的属性是: rule里的visibility属性 或者 package函数里的default_visibility属性.
他不生成或者使用文件.仅仅是定义.

例子:
如下在//srcs/business/目录下有4个package.
分别是GXLive; GXLiveBase; GXPhone; GXPhoneBase;
其中GXLive和GXLiveBase是成对出现的.
GXPhone和GXPhoneBase也是成对出现的.是一个整体.
那么我们就可以在//srcs/business目录下创建一个BUILD文件.
声明package_group规则.
这样外界就可以通过live_group和phone_group来引用他们了.

image.png

BUILD内容如下:

image.png

label

所有的target属于一个package.
target的名字被称为label.
一个典型target的label如下所示:
//src/business/GXPhone:GXPhone_binary

每个label有两个部分
src/business/GXPhone被称为package name.
GXPhone_binary被称为target name.

每个label都是独一无二的.如下即一个完整的label
//src/business/GXPhone:GXPhone_binary

有时如果target name和package name一样.那么label可以有以下四种表示形式.他们是等价的.
//src/business/GXPhone:GXPhone
//src/business/GXPhone
:GXPhone
GXPhone

'//'代表根目录

label在某些情况下可以简写.但是更推荐写完整.所以如果想知道怎么简写就自己看官方文档把.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容