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

 

说明:

  • 在该文件所在的目录下,直接输入make命令就可以生成edit可执行文件。
  • target包括:edit和中间的目标文件("*.o")
  • prerequisites包括:冒号后面的 .c 文件和 .h 文件
  • command一定要以一个Tab键作为开头
  • clean:上面代码中的clean只不过是一个动作名字,和C中的lable一样。其冒号后面什么也没有,那么make就不会去找文件的依赖性,也就不会执行其后定义的命令。如果要执行后面的命令,则需在make命令后明显的指出这个lable的名字。eg:make clean


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文件测试

你可能感兴趣的:(makefile)