(码字不易,关注一下吧w~~w)
makefile文件是用来管理项目文件,通过执行make命令,make就会解析并执行makefile文件。
命名:makefile或者Makefile
规则:
目标文件:依赖文件
(tab)命令
第一个版本:
这是新建makefile文件的内容:
依赖文件不用写.h头文件
接下来执行make ,就会生成main文件
缺点:改其中一个文件,就得重新编译
第二个版本:
检查规则:
要想生成目标文件,先检查依赖条件是否都存在:
若都存在,则比较目标时间和以依赖时间,如果依赖时间比目标时间新,则重新生成目标;否则不重新生成;
若不存在,则往下找有没有生成依赖的规则,有则生成,没有就报错。
这是makefile文件的内容:
执行make命令后:
第二个版本可以消除第一个版本的缺点
原因:
假设add.c更新最新修改时间时
add.o(依赖文件)的时间比add.c(目标文件)的时间晚,就会执行gcc -c add.o add.c命令
紧接着main(依赖文件)的时间比add.o(目标文件)的时间晚,就会执行gcc -o main main.o add.o jian.o命令
第三个版本:
变量:
自定义变量:v=hello ,下文中$(v)=hello
自带变量:CC(gcc),CPPFLAGS( -I -->头文件所在目录),LDFLAGS(链接器选项 -L -l),CFLAGS(c编译器选项 -wall -g -c)
(只能用在命令中)自动变量:$@ -->表示规则中的目标
$< -->表示规则中的第一个条件(依赖文件)
$^ -->表示规则中所有条件(重复项消除重复项)
模式规则:
%.o:%.c -->.o文件依赖与.c文件 %必须一样
通过使用变量的makefile:
执行make:
第四个版本 :
函数:
1:wildcard 查找指定目录下指定类型的文件
src=$(wildcard *.c)//找到当前目录下.c文件,赋值给src
2:patsubst 匹配替换
obj=$(patsubst %.c,%.o,$(src))//把src变量所有.c文件替换为.o文件
执行make:
第五个版本:
.PHONY:clean
把clean设为为伪命令,clean就不需要依赖了。
第一个出现的目标为终极目标。
make命令就是实现终极目标
make clean 实现 clean
使用-f可以指定makefile名字
make -f mainmak clean