




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
2.2鴻蒙系統(tǒng)構(gòu)建工具鏈通過本節(jié)學(xué)習(xí),您可以:了解鴻蒙系統(tǒng)構(gòu)建工具鏈了解Ninja構(gòu)建工具了解Ninja常用語法了解GN常用語法鴻蒙系統(tǒng)構(gòu)建工具鏈1.什么是工具鏈?工具鏈本質(zhì)上是工具和鏈。工具的目標(biāo)是生成可以運行的程序或庫文件。為了達到該目標(biāo),內(nèi)部需要經(jīng)歷編譯過程和鏈接過程。編譯過程:編譯的輸入:程序代碼;編譯的輸出:目標(biāo)文件;編譯需要的工具:編譯器GCC。鏈接過程:鏈接的輸入:程序運行所依賴的庫文件或某個庫所依賴的另一個庫文件;鏈接的輸出:程序的可執(zhí)行文件,或者可被調(diào)用的完整的庫文件;鏈接需要的工具:鏈接器,即LD。鴻蒙系統(tǒng)構(gòu)建工具鏈2.什么是構(gòu)建工具?構(gòu)建工具是一個可編程的工具,它描述內(nèi)容包括:整個工程如何編譯、連接、打包等規(guī)則,工程中的哪些源文件需要編譯以及如何編譯,需要創(chuàng)建哪些庫文件以及如何創(chuàng)建庫文件。構(gòu)建一個項目通常包含了依賴管理、測試、編譯、打包、發(fā)布等流程,構(gòu)建工具可以自動化進行這些操作,從而為我們減少這些繁瑣的工作。其中構(gòu)建工具提供的依賴管理能夠可以自動處理依賴關(guān)系。例如一個項目需要用到依賴A,A又依賴于B,那么構(gòu)建工具就能幫我們導(dǎo)入B,而不需要我們手動去尋找并導(dǎo)入。鴻蒙系統(tǒng)構(gòu)建工具鏈3.鴻蒙構(gòu)建工具鏈鴻蒙內(nèi)核LliteOS的編譯構(gòu)建工具是hb,hb是ohos-build的簡稱,ohos是openharmonyOS的簡稱。鴻蒙構(gòu)建系統(tǒng)是由Python、GN、Ninja、makefile等幾個部分組成:Python:對參數(shù)、環(huán)境變量、文件進行操作,負(fù)責(zé)編譯前的準(zhǔn)備工作和為GN收集命令參數(shù)。GN:GN即GenerateNinja,用于生成Ninja文件。Ninja:Ninja是一個致力于速度的小型編譯系統(tǒng)。Makefile:Makefile文件中包括了編譯和處理規(guī)則,通過Makefile工具解析Makefile文件中的命令來指導(dǎo)整個工程的編譯過程。Ninja構(gòu)建工具1.Ninja簡介Ninja是Google的一名程序員推出的注重速度的構(gòu)建工具,是一個專注于速度的小型構(gòu)件系統(tǒng),只需拷貝一個可執(zhí)行程序ninja就可以執(zhí)行,不需要依賴任何庫。Ninja的設(shè)計目的:是為了使編譯過程更快,Ninja類似構(gòu)建工具make,make即GNUMake,一個用于決定如何使用命令完成最終目標(biāo)構(gòu)建的程序。Make本身不知道如何具體的完成目標(biāo)的構(gòu)建工作,它需要通過makefile中的描述來決定目標(biāo)構(gòu)建的具體方案,根據(jù)makefile中的規(guī)則執(zhí)行命令,最后完成編譯輸出。Ninja構(gòu)建工具2.Ubuntu環(huán)境安裝NinjaNinja編譯需要依賴re2c,re2c是一款語法分析器。在Linux系統(tǒng)中右鍵打開終端,終端中輸入命令安裝re2c。
命令:sudoapt-getinstallre2c檢測re2c版本。
命令:re2c--versionNinja構(gòu)建工具3.Ubuntu環(huán)境安裝Ninja安裝Ninja,在終端中輸入下載命令。
命令:gitclone/ninja-build/ninja.git對Ninja進行安裝和編譯。在終端中輸入命令:
命令:cdninja
命令:./configure.py--bootstrap檢測Ninja安裝情況。
命令:sudocp./ninja/usr/bin
命令:ninja--version
Ninja常用語法1.基本概念edge(邊):build語句,可以指定目標(biāo)(target)輸出(output)、規(guī)則(rule)與輸入(input),是編譯過程拓?fù)鋱D中的一條邊(edge)。target(目標(biāo)):編譯過程需要差生的目標(biāo),由build語句指定。output(輸出):build語句的前半段,是target的另一種稱呼。input(輸入):build語句的后半段,用于產(chǎn)生output的文件或目標(biāo),另一種稱呼是依賴。rule(規(guī)則):通過指定command與一些內(nèi)置變量,決定如何從輸入產(chǎn)生輸出。Pool:一組rule或edge,通過指定其depth,可以控制并行上限。scope(作用域):變量的作用范圍,有rule與build語句的塊級,也有文件級別。
Ninja常用語法2.關(guān)鍵字build:定義一個edge。rule:定義一個rule。pool:定義一個pool。default:指定默認(rèn)的一個或多個target。include:添加一個ninja文件到當(dāng)前scope。subninja:添加一個ninja文件,其scope與當(dāng)前文件不同。phony:一個內(nèi)置的特殊規(guī)則,指定非文件的target。
Ninja常用語法3.rule、build及poolrule:一個rule就是通過${in}輸入的目標(biāo)列表,生成${out}的輸出目標(biāo)列表,目標(biāo)一般是文件。rulenamecommand=echo${in}>${out}var=strbuild:build代碼塊,是編譯過程中的一個edge。其中,foo是output,bar是input,“:”后面第一個位置的phony是rule,var是自定義變量。buildfoo:phonybarvar=str
Ninja常用語法pool:限制一些非常消耗硬件資源的edge同時執(zhí)行。通過pool=example,在rule或build代碼塊中指定對應(yīng)的edge所屬的pool為example。由于example的depth=2,所以a、b、c三個target最多只有2個可以同時生成。poolexampledepth=2ruleecho_varcommand=echo${var}>>${out}pool=examplebuilda:echo_varvar=abuildb:echo_varvar=bbuildc:echo_varvar=cGN常用語法GN是Ninja構(gòu)建文件的元構(gòu)建工具,能夠構(gòu)建出Ninja的.ninja文件,比起Ninja原本的構(gòu)建命令,GN能夠比較好地進行依賴管理,并且能夠很方便的輸出構(gòu)建圖譜。GN使用非常簡單的動態(tài)類型語言。語言的類型包括:布爾(true,false),64位有符號整數(shù),字符串,列表(任何其他類型),范圍(Scopes),條件語句,循環(huán),函數(shù)調(diào)用。GN常用語法字符串:列表:a="mypath"b="$a/foo.cc"http://b->"mypath/foo.cc"c="foo${a}bar.cc"http://c->"foomypathbar.cc"a=["first"]a+=["second"]//["first","second"]a+=["third","fourth"]//["first","second","third","fourth"]b=a+["fifth"]//["first","second","third","fourth","fifth"]GN常用語法條件語句:if(is_linux||(is_win&&target_cpu=="x86")){source-=["something.cc"]}else{...}GN常用語法循環(huán):函數(shù)調(diào)用:Foreach(i,mylist){print(i)//Note:iisacopyofe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 郵政分揀設(shè)備性能測試與評價考核試卷
- 木片加工車間數(shù)字化管理考核試卷
- 學(xué)習(xí)數(shù)據(jù)庫開發(fā)中的樣例數(shù)據(jù)創(chuàng)建策略試題及答案
- 功耗優(yōu)化在嵌入式中的實踐試題及答案
- 數(shù)據(jù)庫設(shè)計中的關(guān)鍵考察點試題及答案
- 公路工程交通管理最佳實踐試題及答案
- 廠區(qū)小區(qū)住宿管理制度
- 宿舍物業(yè)維修管理制度
- 封閉現(xiàn)場紀(jì)律管理制度
- 計算機二級MySQL函數(shù)應(yīng)用試題及答案
- 深圳市住房公積金管理中心員額人員招聘真題2024
- 2025年全國國家版圖知識競賽題庫及答案
- 《創(chuàng)傷失血性休克中國急診專家共識(2023)》解讀課件
- MOOC 數(shù)字邏輯電路實驗-東南大學(xué) 中國大學(xué)慕課答案
- 入團志愿書(2016版本)(可編輯打印標(biāo)準(zhǔn)A4) (1)
- 控?zé)熍嘤?xùn)課件.ppt.ppt
- 《千家詩》全文閱讀
- 思南塘頭字牌僰的傳承
- 國家開放大學(xué)《會計學(xué)概論》章節(jié)測試參考答案
- 4、支氣管哮喘搶救流程
- 監(jiān)控系統(tǒng)工程量清單2
評論
0/150
提交評論