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。
4. http://source.android.com/porting/build_cookbook.html