引用文章說明Makefile(android.mk)

android是什麼就不用說了,android自從開源以來,就受到很多人的追捧。當然,一部人追捧它是因爲它是Google開發的。對一個程序員來說,一個系統值不值得追捧得要拿代碼來說話。我這裏並不打算分析android的代碼,而是android的makefile,我想通過分析andorid的makefile來告訴大家如何寫makefile。

對於一個程序新手而言,好的IDE是他們追捧的對象。但當他接觸的代碼多了之後,就會逐漸發現IDE不夠用了,因爲有好多東西用IDE是不好做的,例如自動編譯,測試,版本控制,編譯定製等。這跟政治課上的一句話有點像:資本主義開始的時候是促進生產力發展的,但到了後來又成了阻礙生產力發展的因素了。如果一個程序不能擺脫IDE的限制(不是不用,而是要有選擇的用),那麼他就很難提高。要知道,IDE和makefile代表了兩種不同的思想:IDE強調的是簡化計算機與用戶的交互;而makefile體現的是自動化。

對於一個一開始就接觸linux的人來說,makefile可能是比較容易學的(熟能生巧),對於一個一開始就接觸Windows的人來說,makefile就不太好學,這主要是應該很多時候會不自覺地去用Visual Studio(Visual Studio是個好東西,特別是它的調試)。不知道大叫有沒有這個的感覺:一個人如果先接觸c,再接觸java會比較容易點;如果一個人先接觸java,再接觸c,就會比較反感c。

這個先引用一下百度百科對makefile的一些描述:

一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要後編譯,哪些文件需要重新編譯,甚至於進行更復雜的功能操作,因爲 makefile就像一個Shell腳本一樣,其中也可以執行操作系統的命令。

makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數的IDE都有這個命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成爲了一種在工程方面的編譯方法。

Make工具最主要也是最基本的功能就是通過makefile文件來描述源程序之間的相互關係並自動維護編譯工作。而makefile 文件需要按照某種語法進行編寫,文件中需要說明如何編譯各個源文件並連接生成可執行文件,並要求定義源文件之間的依賴關係。makefile 文件是許多編譯器--包括 Windows NT 下的編譯器--維護編譯信息的常用方法,只是在集成開發環境中,用戶通過友好的界面修改 makefile 文件而已。

對於android而言,android使用的是GNU的make,因此它的makefile格式也是GNU的makefile格式。現在網絡上關於makefile最好的文檔就是陳皓的《跟我一起寫makefile》,這份文檔對makefile進行了詳細的介紹,因此推薦大家先看這份文檔(電子版可以到http://pipi.googlecode.com/files/How%20to%20Write%20makefile.pdf下載,陳皓的blog在http://blog.csdn.net/haoel)。

android最頂層的目錄結構如下:


|-- Makefile        (全局的Makefile) 
|-- bionic          (Bionic含義爲仿生,這裏面是一些基礎的庫的源代碼) 
|-- bootloader      (引導加載器) 
|-- build           (build目錄中的內容不是目標所用的代碼,而是編譯和配置所需要的腳本和工具) 
|-- dalvik          (JAVA虛擬機) 
|-- development     (程序開發所需要的模板和工具) 
|-- external        (目標機器使用的一些庫) 
|-- frameworks      (應用程序的框架層) 
|-- hardware        (與硬件相關的庫) 
|-- kernel          (Linux2.6的源代碼) 
|-- packages        (Android的各種應用程序) 
|-- prebuilt        (Android在各種平臺下編譯的預置腳本) 
|-- recovery        (與目標的恢復功能相關) 
`-- system          (Android的底層的一些庫)

本文將要分析的是build目錄下的makefile和shell文件,android的代碼是1.5的版本。

主要的目錄結構如下:

1.makefile入門

    1.1 makefile helloworld

    1.2 用makefile構建交叉編譯環境

    1.3 makefile裏面的一些技巧

2.android makefile分析

    2.1 android shell分析

    2.2 android build下的各個makefile分析

3. android其他目錄的android.mk分析

 

由於最近研究生要畢業了,得找工作了,所以可能分析有時候會間斷一兩天,望大家能夠諒解。

作爲序的最後,大家先通過網絡的一些文章來了解一下andoroid的makefile。

1.Android build system

2.Android Building System 分析

3.Android Build System(介紹使用)

4. http://source.android.com/porting/build_cookbook.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章