国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
android makefile(android.mk)分析
android makefile(android.mk)分析
 
android是什么就不用說了,android自從開源以來,就受到很多人的追捧。當(dāng)然,一部人追捧它是因?yàn)樗荊oogle開發(fā)的。對一個(gè)程序員來說,一個(gè)系統(tǒng)值不值得追捧得要拿代碼來說話。我這里并不打算分析android的代碼,而是android的makefile,我想通過分析andorid的makefile來告訴大家如何寫makefile。
對于一個(gè)程序新手而言,好的IDE是他們追捧的對象。但當(dāng)他接觸的代碼多了之后,就會逐漸發(fā)現(xiàn)IDE不夠用了,因?yàn)橛泻枚鄸|西用IDE是不好做的,例如自動(dòng)編譯,測試,版本控制,編譯定制等。這跟政治課上的一句話有點(diǎn)像:資本主義開始的時(shí)候是促進(jìn)生產(chǎn)力發(fā)展的,但到了后來又成了阻礙生產(chǎn)力發(fā)展的因素了。如果一個(gè)程序不能擺脫IDE的限制(不是不用,而是要有選擇的用),那么他就很難提高。要知道,IDE和makefile代表了兩種不同的思想:IDE根據(jù)強(qiáng)調(diào)的是簡化計(jì)算機(jī)與用戶的交互;而makefile體現(xiàn)的是自動(dòng)化。
對于一個(gè)一開始就接觸linux的人來說,makefile可能是比較容易學(xué)的(熟能生巧),對于一個(gè)一開始就接觸Windows的人來說,makefile就不太好學(xué),這主要是應(yīng)該很多時(shí)候會不自覺地去用Visual Studio(Visual Studio是個(gè)好東西,特別是它的調(diào)試)。不知道大叫有沒有這個(gè)的感覺:一個(gè)人如果先接觸c,再接觸java會比較容易點(diǎn);如果一個(gè)人先接觸java,再接觸c,就會比較反感c。
這個(gè)先引用一下百度百科對makefile的一些描述:
一個(gè)工程中的源文件不計(jì)數(shù),其按類型、功能、模塊分別放在若干個(gè)目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜的功能操作,因?yàn)?makefile就像一個(gè)Shell腳本一樣,其中也可以執(zhí)行操作系統(tǒng)的命令。
makefile帶來的好處就是——“自動(dòng)化編譯”,一旦寫好,只需要一個(gè)make命令,整個(gè)工程完全自動(dòng)編譯,極大的提高了軟件開發(fā)的效率。make是一個(gè)命令工具,是一個(gè)解釋makefile中指令的命令工具,一般來說,大多數(shù)的IDE都有這個(gè)命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make??梢姡琺akefile都成為了一種在工程方面的編譯方法。
Make工具最主要也是最基本的功能就是通過makefile文件來描述源程序之間的相互關(guān)系并自動(dòng)維護(hù)編譯工作。而makefile 文件需要按照某種語法進(jìn)行編寫,文件中需要說明如何編譯各個(gè)源文件并連接生成可執(zhí)行文件,并要求定義源文件之間的依賴關(guān)系。makefile 文件是許多編譯器--包括 Windows NT 下的編譯器--維護(hù)編譯信息的常用方法,只是在集成開發(fā)環(huán)境中,用戶通過友好的界面修改 makefile 文件而已。
 
對于android而言,android使用的是GNU的make,因此它的makefile格式也是GNU的makefile格式?,F(xiàn)在網(wǎng)絡(luò)上關(guān)于makefile最好的文檔就是陳皓的《跟我一起寫makefile》,這份文檔對makefile進(jìn)行了詳細(xì)的介紹,因此推薦大家先看這份文檔(電子版可以到http://pipi.googlecode.com/files/How%20to%20Write%20makefile.pdf下載,陳皓的blog在http://blog.csdn.net/haoel)。
android最頂層的目錄結(jié)構(gòu)如下:
.
|-- Makefile        (全局的Makefile)
|-- bionic          (Bionic含義為仿生,這里面是一些基礎(chǔ)的庫的源代碼)
|-- bootloader      (引導(dǎo)加載器)
|-- build           (build目錄中的內(nèi)容不是目標(biāo)所用的代碼,而是編譯和配置所需要的腳本和工具)
|-- dalvik          (JAVA虛擬機(jī))
|-- development     (程序開發(fā)所需要的模板和工具)
|-- external        (目標(biāo)機(jī)器使用的一些庫)
|-- frameworks      (應(yīng)用程序的框架層)
|-- hardware        (與硬件相關(guān)的庫)
|-- kernel          (Linux2.6的源代碼)
|-- packages        (Android的各種應(yīng)用程序)
|-- prebuilt        (Android在各種平臺下編譯的預(yù)置腳本)
|-- recovery        (與目標(biāo)的恢復(fù)功能相關(guān))
`-- system          (Android的底層的一些庫)
本文將要分析的是build目錄下的makefile和shell文件,android的代碼是1.5的版本。
主要的目錄結(jié)構(gòu)如下:
1.makefile入門
    1.1 makefile helloworld
    1.2 用makefile構(gòu)建交叉編譯環(huán)境
    1.3 makefile里面的一些技巧
2.android makefile分析
    2.1 android shell分析
    2.2 android build下的各個(gè)makefile分析
3. android其他目錄的android.mk分析
由于最近研究生要畢業(yè)了,得找工作了,所以可能分析有時(shí)候會間斷一兩天,望大家能夠諒解。
作為序的最后,大家先通過網(wǎng)絡(luò)的一些文章來了解一下andoroid的makefile。
1.Android build system
2.Android Building System 分析
3.Android Build System(介紹使用)

本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/chief1985/archive/2009/10/19/4699831.aspx
 
android makefile(android.mk)分析(1) 收藏 此文于2009-10-21被推薦到CSDN首頁
如何被推薦?
1.1 makefile helloworld
Makefile的規(guī)則如下:
target ... : prerequisites ...
command ... ...
target可以是一個(gè)目標(biāo)文件,也可以是Object File(例如helloworld.obj),也可以是執(zhí)行文件和標(biāo)簽。
prerequisites就是生成target所需要的文件或是目標(biāo)。
command也就是要達(dá)到target這個(gè)目標(biāo)所需要執(zhí)行的命令。這里沒有說“使用生成target所需要執(zhí)行的命令”,是因?yàn)閠arget可能是標(biāo)簽。需要注意的是command前面必須是TAB鍵,而不是空格,因此喜歡在編輯器里面將TAB鍵用空格替換的人需要特別小心了。
我們寫程序一般喜歡寫helloworld,當(dāng)我們寫了一個(gè)c的helloworld之后,我們該如何寫helloworld來編譯helloworld.c呢?
下面就是編譯helloworld的makefile。
helloworld : helloworld.o
    cc -o helloworld helloworld .o
helloworld.o : helloworld.c
    cc -c main.c
clean:
    rm helloworld helloworl.o
 
之后我們執(zhí)行make就可以編譯helloworld.c了,執(zhí)行make clean就可以清除編譯結(jié)果了(其實(shí)就是刪除helloworld helloworl.o)。
可能有人問為什么執(zhí)行make就會生成helloworld呢?這得從make的默認(rèn)處理說起:make將makefile的第一個(gè)target作為作為最終的
target,凡是這個(gè)規(guī)則依賴的規(guī)則都將被執(zhí)行,否則就不會執(zhí)行。所以在執(zhí)行make的時(shí)候,clean這個(gè)規(guī)則就沒有被執(zhí)行。
上面的是最簡單的makefile,復(fù)雜點(diǎn)makefile就開始使用高級點(diǎn)的技巧了,例如使用變量,使用隱式規(guī)則,執(zhí)行負(fù)責(zé)點(diǎn)shell命令(常見的是字符串處理和文件處理等),這里不打算介紹這些規(guī)則,后面在分析android的makefile時(shí)會結(jié)合具體代碼進(jìn)行具體分析,大家可以先看看陳皓的《跟我一起寫makefile》來了解了解。
makefile的大體的結(jié)構(gòu)是程序樹形的,如下:
                                                     
這樣寫起makefile也簡單,我們將要達(dá)到的目標(biāo)作為第一個(gè)規(guī)則,然后將目標(biāo)分解成子目標(biāo),然后一個(gè)個(gè)寫規(guī)則,依次類推,直到最下面的規(guī)則很容易實(shí)現(xiàn)為止。這其實(shí)和算法里面的分治法很像,將一個(gè)復(fù)雜的問題分而治之。
說到樹,我想到了編譯原理里面的語法分析,語法分析里面有自頂而下的分析方法和自底而下的分析方法。當(dāng)然makefile并不是要做語法分析,而是要做與語法分析分析相反的事。(語法分析要做的是一個(gè)句子是不是根據(jù)語法可以推出來,而makefile要做的是根據(jù)規(guī)則生成一個(gè)command 執(zhí)行隊(duì)列。)不過makefile的規(guī)則和詞法分析還是很像的。下面出一道編譯原理上面的一個(gè)例子,大家可以理解一下makefile和詞法分析的不同點(diǎn)和相同點(diǎn):
<標(biāo)識符>  -> <字母><字母數(shù)字串>
    <字母數(shù)字串>  -> <字母><字母數(shù)字串>|<數(shù)字><字母數(shù)字串>|<下劃線><字母數(shù)字串>|ε
   <無符號整數(shù)> -> <數(shù)字><數(shù)字串>
   <數(shù)字串> -> <數(shù)字><數(shù)字串>|ε
  <加法運(yùn)算符>  -> +
   <減法運(yùn)算符> -> -
  <大于關(guān)系運(yùn)算符> -> >
   <大于等于關(guān)系運(yùn)算符> -> >=
 
最后,介紹一下autoconfautomake,使用這兩個(gè)工具可以自動(dòng)生成makefile。
 
從上面的圖可以看出,通過autoscan,我們可以根據(jù)代碼生成一個(gè)叫做configure.scan的文件,然后我們編輯這個(gè)文件,參數(shù)一個(gè)configure.in的文件。接著我們寫一個(gè)makefile.am的文件,然后就可以用automake生成makefile.in,最后,根據(jù)makefile.in和configure就可以生成makefile了。在很多開源的工程里面,我們都可以看到makefile.am,configure.in,makefine.in,configure文件,還有可能看到一個(gè)十分復(fù)雜的makefile文件,許多人學(xué)習(xí)makefile的時(shí)候想通過看這個(gè)文件來學(xué)習(xí),最終卻發(fā)現(xiàn)太復(fù)雜了。如果我們知道這個(gè)文件是自動(dòng)生成的,就理解這個(gè)makefile文件為什么這個(gè)復(fù)雜了。
欲更加詳細(xì)的理解automake等工具,可以參考http://www.ibm.com/developerworks/cn/linux/l-makefile/

本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/chief1985/archive/2009/10/20/4705123.aspx
 
 
 
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android.mk文件語法規(guī)范及使用模板
程序編譯過程分析
Linux下Makefile的automake生成全攻略
用VC編譯驅(qū)動(dòng)程序
OpenWrt增加軟件包的方法
Dev
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服