一、Make工程管理工具
1)概念
工程管理: 主要功能指的就是就是编译工程,生成最终的二进制可执行文件。
Make是一个项目管理工具,make需要一个配置文件Makefile才可运行出实际的工程管理效果,Makefile是用来配置make指定编译选项(编译器、编译文件、目标文件)、编译环境(头文件路径、库名字、库的路径、安装第三方插件…)等
2)使用Make的优势
毫无疑问,在基于项目源码文件多达成千上万个时,如果重新编译项目需要耗费很长的时间。编译耗时2、3个小时是很正常的情况。而使用Make编译项目减少时间的消耗,Make会根据每个源码文件的更新时间戳判断该文件是否更新,如果跟新了则从新编译改文件,其他没更新的文件则从.o文件进行编译。
3)Makefile的编写规范
注:Makefile中,如果是该行是脚本命令,则该行前要打制表符(TAB),make才会识别这一行是脚本命令。
书写规则:
目标文件:依赖文件
制表符脚本命令
① 第一版本
main:xxx.o
gcc xxx.o -o main
xxx.o:xxx.c
gcc -c xxx.c -o xxx.o
clean: #伪命令
rm xxx.o
② 第二版本 (make会自动推导编译生成.o文件)
main:xxx.o
gcc xxx.o -o main
clean:
rm xxx.o -rf
③ 第三版本 (多个.c文件)
main:hello.o world.o
gcc hello.o world.o -o main
hello.o:hello.c
gcc -c hello.c -o hello.o
world.o:world.c
gcc -c world.c -o world.o
clean:
rm hello.o world.o -rf
④ 第四版本(自动搜索替换)
SRCS=$(wlidcard *.c) #获取当前工作目录中所有.c文件(拓展通配符)
OBJS=$(patsubst %.c,%.o,$(SRCS))
CC = gcc
TARGET=main
main:$(OBJS)
gcc $(OBJS) -o main
%.o:%.c
gcc -c $(^) -o $($) # ^依赖列表 $:目标列表
clean:
rm $(OBJS) $(TARGET)
⑤ 分析-----%.o:%.c
静态模式的表达:定义多目标的规则,可以根据目标文件构造出依赖文件。
前面%.o指定的结尾为.o的文件集合,同时对后面的依赖文件位置进行第二次定义,把%给 依赖文件并且结尾加上.c。