構建工具blade

概述

Blade 是一個現代構建系統,期望的目標是強大而好用,把程序員從構建的繁瑣中解放出來。

Blade主要定位于linux下的大型C++項目,密切配合研發流程,比如單元測試,持續集成,覆蓋率統計等。但像unix下的文本過濾程序一樣,保持相對的獨立性,可以單獨運行。目前重點支持i386/x86_64 Linux,未來可以考慮支持其他的類Unix系統。

騰訊公司“臺風”云計算平臺開發過程中,為了解決 GNU Make,Autotools 的難用和繁瑣的問題,我們開發了這個全新的構建系統,整個系統基于多個聲明式的構建腳本,在構建腳本里,只需要聲明要構建什么目標,目標的源代碼,以及其直接依賴的其它目標,不需要說明如何構建。大大降低了使用難度,提高了開發效率。

首先,Blade解決了依賴問題。
當你在構建某些目標時,頭文件有變化,會自動重新構建。
最方便的是,Blade也能追蹤庫文件的依賴關系。比如
庫 foo 依賴庫 common,那么在庫 foo 的 BUILD 文件中列入依賴:

cc_library(
    name = 'foo',
    srcs = ...,
    deps = ':common'
)

那么對于使用foo的程序,如果沒有直接用到common,那么就只需要列出foo,并不需要列出common。

cc_binary(
    name = 'my_app',
    srcs = ...,
    deps = ':foo'
)

這樣當你的庫實現發生變化,增加或者減少庫時,并不需要通知庫的用戶一起改動,Blade自動維護這層間接的依賴關系。當構建my_app時,也會自動檢查foo和common是否也需要更新。

說到易用性,除了依賴關系的自動維護,Blade還可以做到,用戶只需要敲一行命令,就能把整個目錄樹的編譯鏈接和單元測試全部搞定。例如:

遞歸構建和測試common目錄下所有的目標

$ blade test common...

以32位模式構建和測試

$ blade test -m32 common...

以調試模式構建和測試

$ blade test -pdebug common...

顯然,你可以組合這些標志

$ blade test -m32 -pdebug common...

特點

  • 自動分析頭文件依賴關系,構建受影響的代碼。
  • 增量編譯和鏈接,只構建因變更受影響而需要重新構建的代碼。
  • 自動計算庫的間接依賴,庫的作者只需要寫出直接依賴,構建時自動檢查所依賴的庫是否需要重新構建。
  • 在任意代碼樹的任意子目錄下都能構建。
  • 支持一次遞歸構建多個目錄下的所有目標,也支持只構建任意的特定的目標。
  • 無論構建什么目標,這些目標所依賴的目標也會被自動連坐更新。
  • 內置 debug/release 兩種構建類型。
  • 彩色高亮構建過程中的錯誤信息。
  • 支持 ccache
  • 支持 distcc
  • 支持基于構建多平臺目標
  • 支持構建時選擇編譯器(不同版本的gcc,clang等)
  • 支持編譯 protobuf,lex, yacc, swig
  • 支持自定義規則
  • 支持測試,在命令行跑多個測試
  • 支持并行測試(多個測試進程并發運行)
  • 支持增量測試(無需重新運行的測試程序自動跳過)
  • 集成 gperftools,自動檢測測試程序的內存泄露
  • 構建腳本 vim 語法高亮
  • svn 式的子命令命令行接口。
  • 支持 bash 命令行補全
  • 用 python 編寫,無需編譯,直接安裝使用。

徹底避免以下問題:

  • 頭文件更新,受影響的模塊沒有重新構建。
  • 被依賴的庫需要更新,而構建時沒有被更新,比如某子目錄依

致謝

  • Blade 是受 Google 官方博客發表的這篇文章啟發而開發的:
    云構建:構建系統是如何工作的
  • 現階段 Blade 生成 SCons 腳本進行構建,因此 Blade 的運行還需要依賴 SCons。
  • Python 是一種簡單易用而又強大的語言,我們喜歡python。
  • 為了支持python 2.6及更低版本,我們把python 2.7中的argparse.py放入了源碼包。
  • Google 開放的一些庫強大而好用,我們很喜歡,我們把對這些庫的支持集成進了Blade中,既方便了庫的使用,又增強了 Blade,這些庫包括 glog, protobuf,gtest, gproftools

更多文檔請參考Blade wiki。

應用

自己嘗試使用sconsBlade分別編譯了一下my_consistent_hash

scons編譯

項目文件(SConstructscons編譯所需的配置文件,相當于makefile):


scons編譯所需配置文件SConstruct內容(下面的Glob表示的是glob模式: 指 shell 所使用的簡化了的正則表達式。支持*,[],?,[0-9]等正則表達式的操作):

Program('conhash', Glob('*.cpp'),CCFLAGS='-std=c++11')

編譯:



編譯后該目錄下的文件:



run:
直接運行 ./conhash 即可

clean:


Blade編譯

項目文件(BUILDBlade編譯所需的配置文件,相當于makefile,Blade獲取源代碼根的方法是,無論當前從哪一級子目錄運行,都從當前目錄開始向上查找BLADE_ROOT文件,故在項目根目錄需要有BLADE_ROOT文件,此處的BLADE_ROOT用的是blade里面自帶的,除了cc_config中的內容,增加了對C++11的支持):


Blade編譯所需配置文件BUILD內容:

編譯:


編譯后該目錄下的文件:



run:

切換至 build64_release 目錄下, 直接運行 ./conhash 即可

clean:

blade clean

參考文獻

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,125評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,506評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,402評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,934評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,168評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,690評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,596評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,027評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,398評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,743評論 2 370

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,776評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,596評論 25 707
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,887評論 6 342
  • 轉載注明出處:http://www.lxweimin.com/p/5255b100930e 0. 前言 完全由個人翻...
    王三的貓阿德閱讀 2,533評論 0 4
  • 發表于2010年12月11日 點點 你還好嗎 好久沒寫信給你 替我問候故鄉的親友 還有你家的小狗 以...
    鄺鑒萍閱讀 243評論 0 4