基本规则
工作原理

- 若所有依赖都存在,检查规则中的目标是否需要更新,依赖被更新,相应的目标也需要更新

语法
1 2 3 4
| CC=gcc CPPFLAGS: C预处理的选项 -I CFLAGS: C编译器的选项 -Wall -g -c LDFLAGS: 链接器选项 -L -l
|
- 自动变量
- $@ 表示规则中的目标
- $< 表示规则中的第一个条件
- $^ 表示规则中的所有条件, 组成一个列表, 以空格隔开, 如果这个列表中有重复的项则消除重复项。
- 模式规则
- 至少在规则的目标定义中要包含 ‘%’, ‘%’ 表示一个或多个, 在依赖条件中同样可以使用’%’ , 依赖条件中的 ‘%’ 的取值取决于其目标
- makefile函数
- wildcard - 查找指定目录下的指定类型的文件
- patsubst - 匹配替换
1 2
| src=$(wildcard *.c) obj=$(patsubst %.c,%.o, $(src))
|
- makefile清理操作
- 清除编译生成的中间.o文件和最终目标文件
- 如果当前目录下有同名clean文件/没有依赖因而默认为最新,则不执行clean对应的命令,可以通过声明伪目标解决
- 伪目标声明: 声明目标为伪目标之后, makefile将不会检查该目标是否存在或者该目标是否需要更新
- **clean命令中的特殊符号 **
- “-”此条命令出错,make也会继续执行后续的命令
- rm -f: 强制执行, 比如若要删除的文件不存在使用-f 不会报错
- “@”不显示命令本身, 只显示结果
- 其他
- make 默认执行第一个出现的目标, 可通过make dest指定要执行的目标(make clean)
- make -f : -f执行一个makefile文件名称
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| src=$(wildcard ./*.c) object=$(patsubst %.c, %.o $(src)) traget=main CC=gcc CPPFLAGS=-I./
$(target):$(object) $(CC) -o $@ $^
%.o:%.c $(CC) -o $@ -c $< $(CPPFLAGS)
.PHONY:clean clean: -rm -f $(target) $(object)
|
-------------本文结束感谢您的阅读-------------
作者将会持续总结、分享,如果愿意支持作者,作者将会十分感激!!!
微信支付
支付宝