本文属于牛客网上的一个项目笔记:Linux高性能服务器开发课
规则:
目标:依赖
命令
目标:需要生成的文件
依赖:生成目标所需要的文件
命令:如何使用依赖生成目标(需要tab缩进)
1、写在后面的规则是为前面的规则服务的,比如第一个规则中的某个依赖不存在,就会检查后面的规则,看看是否会生成它。其他规则都是为第一条规则服务的。
2、会通过比较时间来确定某文件是否需要重新make。
示例:
#生成app需要后面的依赖
app:sub.c add.c mult.c div.c main.c
#这条规则的命令
gcc sub.c add.c mult.c div.c main.c -o app
变量
var = xxx 定义了一个变量var,值是xxx
CC C编译器
GXX CPP编译器
$@ 获取目标文件名称
$< 获取第一个依赖名称
$^ 所有的依赖文件
$(var) 获取var的值
模式匹配
通配符: % 匹配若干字符
函数
$(wildcard PATTERN …)
功能:获取指定目录下指定类型的文件列表
参数:PATTERN指的是某个或多个目录下的对应的某种类型的文件,如果有多个目录,一般是用空格间隔。
返回:得到的若干个文件的文件列表,文件名之间使用空格间隔。
$(patsubst <pattern>,<replacement>,<text>)
功能:查找<text>中的单词(单词以‘空格’,‘回车’,‘tab’,‘换行’分隔)是否符合模式<pattern>,如果匹配的花,则以<replacement替换。,
参数:<pattern>可以包括通配符‘%’,表示任意长度的字串。如果<replacement>中也包含‘%’,那么,<replacement>中的%所代表的将是<parttern>中所表的。(可以用 \ 来转义)
返回:返回被替换后的字符串。
示例:
$(patsubst %.c, %.o, x.c bar.c)
返回:x.o bar.o
清理
删除中间生成的文件。
clean:
rm $(xx.o) -f
makefile基本模板
src=$(wildcard ./*c)
objs=$(patsubst %.c, %.o, $(src))
target=app
$(target):$(objs)
$(CC) $(objs) -o $(target)
#上面缺少文件时,会来下面的规则中找。
#上面缺少sub.o 就会来下面找,%匹配的sub
%.o:%.CC
$(CC) -c $< -o $@
clean:
rm $(objs) -f