NO.4 Makefile文件制作
#编译生成可行文件 #自定义变量 src=$(wildcard ./*.c) #查找当前目录下的所有.c文件 object=$(patsubst %.c, %.o, $(src)) # 将.c文件名改为.o target=main #自带变量 CC=gcc CPPFLAGS=-I./ #指定头文件路径 #目标文件依赖 $(target):$(object) $(CC) -o $@ $^ #.o文件依赖 %.o:%.c $(CC) -g -o $@ -c $< $(CPPFLAGS) #声明clean伪目标 .PHONY:clean #第二目标 clean: -rm -f $(target) $(object)
一、Makefile 定义变量
(1)用户自定义变量
- 变量定义直接用 =
- 使用变量值用 $(变量名)
-
如:下面是变量的定义和使用 foo = abc // 定义变量并赋值 bar = $(foo) // 使用变量, $(变量名)
(2)Makefile自带变量
-
CC = gcc #arm-linux-gcc CPPFLAGS : C预处理的选项 -I CFLAGS: C编译器的选项 -Wall -g -c LDFLAGS : 链接器选项 -L -l
(3)自动变量(只能在命令中使用)
-
$@: 表示规则中的目标 $<: 表示规则中的第一个条件 $^: 表示规则中的所有条件, 组成一个列表, 以空格隔开, 如果这个列表中有重复的项则消除重复项。
二、makefile 模式规则
- 比如: main.o:main.c fun1.o: fun1.c fun2.o:fun2.c, 说的简单点就是: xxx.o:xxx.c
- 直接使用替代:%.o : %.c
注意:此时Makefile文件可简化成这样:(此时还可以简化)
三、makefile 函数
-
1.wildcard – 查找指定目录下的指定类型的文件 src=$(wildcard *.c) //找到当前目录下所有后缀为.c的文件,赋值给src 2.patsubst – 匹配替换 obj=$(patsubst %.c,%.o, $(src)) //把src变量里所有后缀为.c的文件替换成.o
注意:此时Makefile文件可简化成这样:
四、makefile 清理操作
- 伪目标声明:
-
.PHONY:clean 声明目标为伪目标之后, makefile将不会检查该目标是否存在或者该目标是否需要更新。
注意:此时Makefile文件已经成型
五、其他
-
make -f : 用 make 执行指定的 makefile: make -f mainmak
#、注意事项
- Makefile中使用“#”注释
- 使用 touch file.c 改变了源文件的修改时间,则file.c源文件将被Make重新编译;
- Makefile文件中分第一目标,第二目标,默认make执行第一个目标,如果将clean移动到main前面,则第一目标为clean,要执行main则需要使用“make main”。