《鴻蒙智能互聯(lián)設備開發(fā)(微課版)》 課件 2.2 鴻蒙系統(tǒng)構建工具鏈_第1頁
《鴻蒙智能互聯(lián)設備開發(fā)(微課版)》 課件 2.2 鴻蒙系統(tǒng)構建工具鏈_第2頁
《鴻蒙智能互聯(lián)設備開發(fā)(微課版)》 課件 2.2 鴻蒙系統(tǒng)構建工具鏈_第3頁
《鴻蒙智能互聯(lián)設備開發(fā)(微課版)》 課件 2.2 鴻蒙系統(tǒng)構建工具鏈_第4頁
《鴻蒙智能互聯(lián)設備開發(fā)(微課版)》 課件 2.2 鴻蒙系統(tǒng)構建工具鏈_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2.2鴻蒙系統(tǒng)構建工具鏈通過本節(jié)學習,您可以:了解鴻蒙系統(tǒng)構建工具鏈了解Ninja構建工具了解Ninja常用語法了解GN常用語法鴻蒙系統(tǒng)構建工具鏈1.什么是工具鏈?工具鏈本質上是工具和鏈。工具的目標是生成可以運行的程序或庫文件。為了達到該目標,內部需要經歷編譯過程和鏈接過程。編譯過程:編譯的輸入:程序代碼;編譯的輸出:目標文件;編譯需要的工具:編譯器GCC。鏈接過程:鏈接的輸入:程序運行所依賴的庫文件或某個庫所依賴的另一個庫文件;鏈接的輸出:程序的可執(zhí)行文件,或者可被調用的完整的庫文件;鏈接需要的工具:鏈接器,即LD。鴻蒙系統(tǒng)構建工具鏈2.什么是構建工具?構建工具是一個可編程的工具,它描述內容包括:整個工程如何編譯、連接、打包等規(guī)則,工程中的哪些源文件需要編譯以及如何編譯,需要創(chuàng)建哪些庫文件以及如何創(chuàng)建庫文件。構建一個項目通常包含了依賴管理、測試、編譯、打包、發(fā)布等流程,構建工具可以自動化進行這些操作,從而為我們減少這些繁瑣的工作。其中構建工具提供的依賴管理能夠可以自動處理依賴關系。例如一個項目需要用到依賴A,A又依賴于B,那么構建工具就能幫我們導入B,而不需要我們手動去尋找并導入。鴻蒙系統(tǒng)構建工具鏈3.鴻蒙構建工具鏈鴻蒙內核LliteOS的編譯構建工具是hb,hb是ohos-build的簡稱,ohos是openharmonyOS的簡稱。鴻蒙構建系統(tǒng)是由Python、GN、Ninja、makefile等幾個部分組成:Python:對參數(shù)、環(huán)境變量、文件進行操作,負責編譯前的準備工作和為GN收集命令參數(shù)。GN:GN即GenerateNinja,用于生成Ninja文件。Ninja:Ninja是一個致力于速度的小型編譯系統(tǒng)。Makefile:Makefile文件中包括了編譯和處理規(guī)則,通過Makefile工具解析Makefile文件中的命令來指導整個工程的編譯過程。Ninja構建工具1.Ninja簡介Ninja是Google的一名程序員推出的注重速度的構建工具,是一個專注于速度的小型構件系統(tǒng),只需拷貝一個可執(zhí)行程序ninja就可以執(zhí)行,不需要依賴任何庫。Ninja的設計目的:是為了使編譯過程更快,Ninja類似構建工具make,make即GNUMake,一個用于決定如何使用命令完成最終目標構建的程序。Make本身不知道如何具體的完成目標的構建工作,它需要通過makefile中的描述來決定目標構建的具體方案,根據(jù)makefile中的規(guī)則執(zhí)行命令,最后完成編譯輸出。Ninja構建工具2.Ubuntu環(huán)境安裝NinjaNinja編譯需要依賴re2c,re2c是一款語法分析器。在Linux系統(tǒng)中右鍵打開終端,終端中輸入命令安裝re2c。

命令:sudoapt-getinstallre2c檢測re2c版本。

命令:re2c--versionNinja構建工具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語句,可以指定目標(target)輸出(output)、規(guī)則(rule)與輸入(input),是編譯過程拓撲圖中的一條邊(edge)。target(目標):編譯過程需要差生的目標,由build語句指定。output(輸出):build語句的前半段,是target的另一種稱呼。input(輸入):build語句的后半段,用于產生output的文件或目標,另一種稱呼是依賴。rule(規(guī)則):通過指定command與一些內置變量,決定如何從輸入產生輸出。Pool:一組rule或edge,通過指定其depth,可以控制并行上限。scope(作用域):變量的作用范圍,有rule與build語句的塊級,也有文件級別。

Ninja常用語法2.關鍵字build:定義一個edge。rule:定義一個rule。pool:定義一個pool。default:指定默認的一個或多個target。include:添加一個ninja文件到當前scope。subninja:添加一個ninja文件,其scope與當前文件不同。phony:一個內置的特殊規(guī)則,指定非文件的target。

Ninja常用語法3.rule、build及poolrule:一個rule就是通過${in}輸入的目標列表,生成${out}的輸出目標列表,目標一般是文件。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代碼塊中指定對應的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構建文件的元構建工具,能夠構建出Ninja的.ninja文件,比起Ninja原本的構建命令,GN能夠比較好地進行依賴管理,并且能夠很方便的輸出構建圖譜。GN使用非常簡單的動態(tài)類型語言。語言的類型包括:布爾(true,false),64位有符號整數(shù),字符串,列表(任何其他類型),范圍(Scopes),條件語句,循環(huán),函數(shù)調用。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ù)調用:Foreach(i,mylist){print(i)//Note:iisacopyofe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論