做过 Android 平台开发的朋友对make,mm或make clean命令应该很熟悉,但也许大家只是熟知这些命令的作用却不知道这些命令底下有些什么原理?那么今天我就带着大家推开Android编译系统的大门,探索一下这片未知的恐怖之森(问啥要用恐怖之森后面大家就知道了)。
Makefile入门
在讲解Android编译系统之前首先来了解一下什么是Makefile:
简单的说,Makefile提供了一种机制,让使用者可以有效的组织工作。
注意这里用的是“工作”而非“编译”,这是因为Makefile并不是用来完成编译工作的,它只是一种规则的执行者,而使用者用它来执行什么规则没有任何限制。如既可以用它来编译系统,也能用它备份文档或只是打印log。
既然它是用来执行规则的,那么我们就来看看Makefile的规则。
TARGET:PREREQUISITES
COMMANDS
注意:COMMANDS前面必须有一个TAB制表符
在 Makefile 的规则中TARGET是需要生成的目标文件,PREREQUISITES是目标的先决条件,也是另一个规则中的target。COMMANDS是生成目标文件的命令,当 prerequisites 中的任何一个文件比 target 文件要新的时候就会触发 commands。commands 的具体内容取决于使用者的需求,如调用 gcc 编译器。
下面我们用一个简单的例子说明一下Makefile规则的用法。
涉及到的文件如下:
文件名
描述
mian.c
主函数所在文件
test.h
提供一个测试函数getNumber的声明
test.c
提供getNumber的函数实现,用于返回一个值
Makefile
我们的主角,用于编译整个例子
文件内容如下:
(1)test.h对getNumber进行声明。
int getNumber();
(2)test.c实现getNumber函数
#include "test.h"
int getNumber()
{
return 2333;
}
(3)main.c打印getNumber的返回值
#include
#include "test.h"
int main()
{
printf("Hello,getNumber=%d\n",getNumber());
return 0;
}
(4)