参考文章:https://blog.csdn.net/qq_22182835/article/details/89467386
参考视频:https://www.bilibili.com/video/BV1dt411f7TZ?p=67
Makefile基本原则中的三要素 目标:myCal 依赖:add.c sub.c mul.c main.c 命令:gcc add.c sub.c mul.c main.c -o myCal 规则示例:(版本1) 1.myCal:add.c sub.c mul.c main.c 2. gcc add.c sub.c mul.c main.c -o myCal (第二行为一个tab缩进) 保存之后推出vi编辑,执行make命令,运行makefile文件生成终极目标 直接从.c文件转换成可执行文件,如果其中一个.c文件需要修改,需要把所有的.c文件重新编译一遍,耗时太长 考虑先将.c文件转换成.o文件,修改其中的对应.o文件即可。 优化后如下:(版本2) 1.myCal:add.o sub.o mul.o main.o 2. gcc add.o sub.o mul.o main.o -o myCal 3. 4.add.o:add.c 5. gcc -c add.c 6. 7.sub.o:sub.c 8. gcc -c sub.c ... 规则模式: %:自动匹配所有依赖 makefile中的自动变量: $<:规则中的第一个依赖 $@:规则中的目标 $^:规则中的所有依赖 自动变量只能在规则的命令中使用 使用变量之后优化如下:(版本3) 1.obj=add.o sub.o mul.o main.o【自定义变量--小写】 2.target=myCal 3.$(target):$(obj) 4. gcc $(obj) -o $(target) 5. 6.%.o:%.c 7. gcc -c $< -o $@【自动变量】 makefile中有一些自己维护的变量 CC CFLAGS makefile中函数的使用:(版本4) 1.target=app.out 2.src=$(wildcard ./*.c) 3.obj=$(patsubst ./%.c, ./%.o, $(src)) 4. 5.$(target):$(obj) 6. gcc $(obj) -o $(target) 7. 8.%.o:%.c 9. gcc -c $< -o $@ 10. 11..PHONY:clean【声明伪目标,使其不受更新时间影响,被touch之后仍然执行】 12.clean: 13. rm $(obj) $(target) -f【-f强制执行,不会返回错误信息】 在当前目录下可以执行 make clean来删除所有的.o文件和目标文件 小细节:在makefile的命令前面加上-,当命令执行失败时可以忽略,继续向下执行