makefile 工具基本使用(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。。。。没有所谓的原创,只是总结而已 https://blog.csdn.net/W__L__/article/details/73695216

规则:



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



猜你喜欢

转载自blog.csdn.net/W__L__/article/details/73695216
今日推荐