<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} h1 {mso-margin-top-alt:auto; margin-right:0cm; mso-margin-bottom-alt:auto; margin-left:0cm; mso-pagination:widow-orphan; mso-outline-level:1; font-size:24.0pt; font-family:宋体; mso-bidi-font-family:宋体; font-weight:bold;} a:link, span.MsoHyperlink {color:blue; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline; text-underline:single;} p {mso-margin-top-alt:auto; margin-right:0cm; mso-margin-bottom-alt:auto; margin-left:0cm; mso-pagination:widow-orphan; font-size:12.0pt; font-family:宋体; mso-bidi-font-family:宋体;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} -->
android 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 。
(原地址http://blog.csdn.net/chief1985/archive/2009/10/19/4699831.aspx)