[bazel]-概念和術(shù)語

Change log

目錄

[bazel]-導(dǎo)讀
[bazel]-概念和術(shù)語
[bazel]-bazel的使用
[bazel]-tulsi的使用
[bazel]-如何編譯
[bazel]-緩存
[bazel]-影響緩存命中的因素
[bazel]-優(yōu)化
項目地址

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

介紹

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

Bazel在一個workspace(項目根目錄)里構(gòu)建軟件.

workspace里的源文件以package(包)的嵌套層次結(jié)構(gòu)來組織.

每個package(包)都是一個文件夾.里面包含了相關(guān)源文件和一個BUILD文件.

每個BUILD文件指定這個源文件可以構(gòu)建出來什么樣的輸出.

Workspace, Packages and Targets

Workspace (根文件夾)

一個workspace就是一個project(項目)的根目錄.

workspace里包含構(gòu)建這個項目所需的源文件.以及symbolic links(符號鏈接).

每個workspace目錄都必須有一個名為WORKSPACE的文件.

這個WORKSPACE文件可能是空的.

也可能包含構(gòu)建項目所需的外部依賴.

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

Package (子文件夾)

在一個workspace中package是主要的代碼組織單元.

一個package就是一個相關(guān)文件的集合.也是一個這些相關(guān)文件之間的規(guī)范.

一個package被定義為一個目錄.這個目錄里必須包含一個名為BUILD的文件.

package目錄必須在workspace目錄下.

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

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

例子:
workspace為: GXShell根目錄
package為: universal_target; GXLive; GXLiveBase; GXPhone; GXPhoneBase

image.png

target

package是一個容器.即目錄.

他里面的元素被稱為target.

target可以分為三類: file(文件)和rule(規(guī)則).package group(數(shù)量很少)

file

file進一步分類又可以分為兩種:源文件和派生文件.

源文件通常就是程序員編寫的類文件.會被上傳到遠程倉庫.

派生文件是由編譯器根據(jù)指定規(guī)則生成的文件.不會被上傳到遠程倉庫.

例子:
如在universal_target這個package里的info.plist和main.m都屬于file

image.png

rule

rule不是一個文件.
他是被保存在BUILD文件里的一個函數(shù)或者叫方法.
他是一個規(guī)則.
如下例子中universal_lib和universal都是一個rule.

1.rule指定輸入和輸出之間的關(guān)系.以及構(gòu)建輸出的步驟.
rule的輸出始終是派生文件.
rule的輸入可以是源文件.也可以是派生文件.
也就是說.rule的輸出也可能是另一個rule的輸入.Bazel允許構(gòu)建長鏈規(guī)則.

2.rule的輸入還可以包含其他rule.
即A rule可能有另一個B rule作為輸入.
在編譯期間B的頭文件可用于A
在鏈接期間B的符號可用于A
在執(zhí)行期間B的運行時數(shù)據(jù)可用于A

3.通過rule生成的文件始終屬于該rule所屬的package.
不能將生成文件放到另一個package里.
但是rule的輸入?yún)s可以來自另一個package

4.每個rule都有一個name.由name屬性指定.類型為string.
這個被你指定的名字將作為生成的文件的名稱.
所以推薦名稱可以遵守一定的規(guī)則: 如: _binary和_test.
讓人看名字就知道你要生成的文件的作用.

5.每個規(guī)則都有一組屬性.每個屬性都是rule類里的函數(shù).
每個屬性都有一個名稱和一個類型.
類型可以是: 整數(shù); label; label列表; 字符串; 字符串列表; 輸出label; 輸出label列表.
在每個規(guī)則中不是每個屬性都需要被實現(xiàn)的.即有的屬性是可選的.

例子:
其中srcs這個屬性會出現(xiàn)在很多rule里.
他的類型是label列表.
每個出現(xiàn)在這里的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.
他的目的是限制某些規(guī)則的可訪問性.
package group由package_group函數(shù)定義.
他有兩個屬性: 他包含的包列表及其名稱.
唯一能決定他能否被引用的屬性是: rule里的visibility屬性 或者 package函數(shù)里的default_visibility屬性.
他不生成或者使用文件.僅僅是定義.

例子:
如下在//srcs/business/目錄下有4個package.
分別是GXLive; GXLiveBase; GXPhone; GXPhoneBase;
其中GXLive和GXLiveBase是成對出現(xiàn)的.
GXPhone和GXPhoneBase也是成對出現(xiàn)的.是一個整體.
那么我們就可以在//srcs/business目錄下創(chuàng)建一個BUILD文件.
聲明package_group規(guī)則.
這樣外界就可以通過live_group和phone_group來引用他們了.

image.png

BUILD內(nèi)容如下:

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在某些情況下可以簡寫.但是更推薦寫完整.所以如果想知道怎么簡寫就自己看官方文檔把.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔗崎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子试吁,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異房交,居然都是意外死亡帜篇,警方通過查閱死者的電腦和手機糙捺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笙隙,“玉大人洪灯,你說我怎么就攤上這事【固担” “怎么了签钩?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長坏快。 經(jīng)常有香客問我铅檩,道長,這世上最難降的妖魔是什么莽鸿? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任昧旨,我火速辦了婚禮,結(jié)果婚禮上祥得,老公的妹妹穿的比我還像新娘兔沃。我一直安慰自己,他們只是感情好级及,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布乒疏。 她就那樣靜靜地躺著,像睡著了一般饮焦。 火紅的嫁衣襯著肌膚如雪缰雇。 梳的紋絲不亂的頭發(fā)上入偷,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音械哟,去河邊找鬼疏之。 笑死,一個胖子當著我的面吹牛暇咆,可吹牛的內(nèi)容都是我干的锋爪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼爸业,長吁一口氣:“原來是場噩夢啊……” “哼其骄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扯旷,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤拯爽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后钧忽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毯炮,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年耸黑,在試婚紗的時候發(fā)現(xiàn)自己被綠了桃煎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡大刊,死狀恐怖为迈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缺菌,我是刑警寧澤葫辐,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站伴郁,受9級特大地震影響耿战,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛾绎,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸦列。 院中可真熱鬧租冠,春花似錦、人聲如沸薯嗤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骆姐。三九已至镜粤,卻和暖如春捏题,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肉渴。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工公荧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人同规。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓循狰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親券勺。 傳聞我的和親對象是個殘疾皇子绪钥,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容