一、makefile的基本使用
创建一个名称为makefile的文件,使用vim编辑器在该文件中写入依赖关系和依赖方法
//第一对依赖关系和依赖方法
test1.exe:test1.c//依赖关系
gcc test1.c -o test1.exe//依赖方法
//第二对依赖关系和依赖方法
.PHONY: clean
clean://依赖关系
rm -rf test1.exe//依赖方法
在依赖关系中,冒号前面的是目标文件,冒号后面的是依赖文件列表
目标文件是依赖于依赖文件的,依赖文件可以为空;也可以有多个依赖文件,用空格分隔
.PHONY作用:表明该依赖关系对应的依赖方法总是要被执行的,不会被拦截
makefile文件创建好后,直接使用make调用,默认调用的是第一个目标文件对应的依赖方法,如果调用其他目标文件,则需要使用make + 目标文件名
个人理解:依赖关系就是函数名和参数列表;依赖方法就是函数体
二、makefile的原理
以下列代码为例
hello:hello.o
gcc hello.o -o hello
hello.o:hello.s
gcc -c hello.s -o hello.o
hello.s:hello.i
gcc -S hello.i -o hello.s
hello.i:hello.c
gcc -E hello.c -o hello.i
- 默认情况下,直接调用make,在当前目录下找到名为makefile/Makefile的文件
- 找到文件中的第一个目标文件,即hello,将这个文件作为最终的目标文件
- 如果hello不存在(或者hello依赖的文件hello.o修改时间比hello新),则执行其依赖方法生成hello文件
- 如果hello依赖的文件hello.o不存在,则在makefile文件中找到hello.o目标文件,执行其以来方法生成hello.o文件
- 如果hello.o依赖的hello.i文件也不存在,同样是按照上面的流程一层一层地寻找依赖关系,直到最终生成第一个目标文件
- 在找寻依赖关系的过程中,如果出现错误(例如某个依赖文件找不到),则make会直接退出并报错
三、makefile补充使用
src=test.c #定义变量src代表依赖文件
bin=test.exe #定义变量bin代表最终目标文件
$(bin):$(src) #$可以取出变量指向的文件
@gcc $^ -o $@ #$^表示取出所有依赖文件;$@表示取出最终目标文件
.PHONY:clean
clean:
@rm -rf $(bin) #$(bin)表示取出最终目标文件
#在依赖方法前加上 @ 调用make时就不显示依赖方法