规则:
target(目标文件) : prerequisites(依赖文件)
command(命令)
说明:
target(目标) 最终生成的目标文件
prerequisites(必要条件)生成目标文件所需的依赖文件
command(命令)
生成目标文件的操作系统命令
注意:
1. command 必须以 [Tab] 键开头
2. 只有当依赖文件比目标文件更新时,命令才会被执行
3. make 只以第一个目标文件作为最终生成的目标文件
4. make 命令会在当前目录下按顺序寻找文件名为“GNUmakefile”、
“makefile”、“Makefile”的文件,其它的不识别
例如:
-----------------------------------------------------------
- filename: Makefile
-----------------------------------------------------------
main: main.o func1.o func2.o func3.o
gcc -o main main.o func1.o func2.o func3.o
main.o : main.c func1.h func2.h func3.h
gcc -c main.c
func1.o : func1.c func1.h
gcc -c func1.c
func2.o : func2.c func2.h
gcc -c func2.c
func3.o : func3.c func3.h
gcc -c func3.c
cleanobj :
rm main.o func1.o func2.o func3.o
cleanall :
rm main main.o func1.o func2.o func3.o
-----------------------------------------------------------
make 工作原理:(此处以 Makefile 为例)
1. make 在当前目录下按顺序寻找文件名为“GNUmakefile”、
“makefile”、“Makefile”的文件,其它的不识别
2. 在Makefile 中找到第一个目标文件作为为最终目标文件
3. 在当前目录寻找最终目标文件的依赖文件
a. 找不到依赖文件则报错并退出
***
b. 依赖文件作为目标文件又依赖于其它的依赖文件,
则make 会继续寻找所需的依赖文件,直到依赖文件
不是目标文件为止
4. make 找到所有的依赖文件后根据依赖关系依次执行相应目标
文件所对应的命令
以上例为例 make 执行过程如下:
1. 在当前目录下找到 Makefile
2. 第一个目标文件为 main 作为最终目标文件
3. main 依赖于 main.o func1.o func2.o func3.o
而 main.o 又依赖于 main.c func1.h func2.h func3.h
func1.o 又依赖于 func1.c func1.h
func2.o 又依赖于 func2.c func2.h
func3.o 又依赖于 func3.c func3.h
4. make 找到所有的依赖文件后,根据依赖关系依次执行main.o
func1.o func2.o func3.o 所对应的命令,生成该四个文件
然后依赖刚生成的四个文件执行 main 所对应的命令,生成
最终目标文件
依赖关系图:
main: << gcc -o main main.o func1.o func2.o func3.o
|
|@
main.o:
<< gcc -c main.c
|
|
|
|@
main.c func1.h func2.h func3.h
|
|@
func1.o: << gcc -c func1.c
|
|
|
|@
func1.c func1.h
|
|@
func2.o: << gcc -c func2.c
|
|
|
|@
func2.c func2.h
|
|@
func3.o: << gcc -c func3.c
|
|
|
|@
func3.c func3.h
解释:
"|" 线的最上方为目标文件
"@" 后面为目标文件所需的依赖文件
"<<" 后面为生成目标文件的命令
下载项目源码:http://download.csdn.net/detail/w__l__/9879855