读书人

Makefile学习(一)

发布时间: 2012-07-23 09:42:19 作者: rapoo

Makefile学习(1)

需要研究android的编译过程,则首先需要了解makefile文件。所以现在就开始从最基本的学习——了解makefile。

?

1.makefile的语法规则:


target...:prerequisites...


command
...
...

?

说明:

target:是一个目标文件,可以是Object File,也可以是执行文件。prerequisites:要生成那个target所需要的文件或者目标command:make需要执行的命令(任意的shell命令)

这表明的是一个文件的依赖关系,即target这一个或者多个目标文件依赖于prerequisites中的文件,其生成规则在command中定义。

注:在执行make时,如果prerequisites中有一个以上的文件更新时间比target文件晚,则command所定义的命令就会被执行。

?

2.一个简单makefile文件的示例(网上找的,为了说明语法规则,别介意哈)

edit:main.o? kbd.o

?????? cc -o edit main.o? kbd.o

?main.o:main.c? defs.h

??????? cc -c main.c

?kbd.o:kbd.c? defs.h? command.h

??????? cc -c kbd.c

?clean:

???????? rm edit main.o? kbd.o

?

说明:


3.make的工作过程

?

在默认方式下,也就是我们只输入make命令,那么

make会在当前目录下找makefile文件如果找到该文件,它会找文件中第一个目标文件作为最终的目标文件,如果最终目标文件不存在或者后面的依赖文件的修改时间比较晚,则重新执行后面的命令生成最终的目标文件

注:make会一层一层的去找文件的依赖关系,如果出现错误则make直接退出并报错。

4.makefile中变量的使用:

?

在makefile一开始这样的定义:

objects=main.o? kbd.o

?

于是在makefile中以“$(objects)”的方式就可以使用这个变量,如下:

edit:$(objects)

?????? cc -o edit $(objects)

?main.o:main.c? defs.h

??????? cc -c main.c

?kbd.o:kbd.c? defs.h? command.h

??????? cc -c kbd.c

?clean:

???????? rm edit $(objects)

?

后续任务:makefile学习?? shell命令学习

目标:makefile基本知识掌握后,可以写一个简单的makefile文件测试

读书人网 >移动开发

热点推荐