SRCS:= $(wildcard *.c)
OBJS:= $(patsubst %.c,%.o,$(SRCS))
CC:= gcc
server: $(OBJS)
$(CC) $^ -o $@ -pthread -g
%.o:%.c
$(CC) -c $^ -o $@ -g
clean:
$(RM) $(OBJS) server
rebuild:clean server
第一行 :使用 :=
可以理解为直接赋值,将右侧的值赋给SRCS,wildcard *.c 表示扩展开后续目标目录中的 .c 文件 (此处是当前目录下的所有.c文件)。
SRCS:= $(wildcard *.c ./filepath/.c) :此处为匹配扩展当前目录下的c文件和 ./filepath/文件下的c文件
第二行:patsubst
格式:$(patsubst <pattern>,<replacement>,<text> )
名称:模式字符串替换函数——patsubst。
功能:查找<text>中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式<pattern>,如果匹配的话,则以<replacement>替换。
此处就是,将SRCS中的c文件替换为后缀为 .o 的文件,因为最终的目标文件server(可执行文件是server)依赖各个相关的.o文件,直接替换名称,下面几行步骤编译时,可以不用挨个写出所涉及的.o文件名了,OBJS代表所有.o文件
参考链接:Makefile之patsubst - Geeking - 博客园 (cnblogs.com)
第五行:符号示意
Makefile入门二、理解$@、$^和$<_makefile $<_hjxu2016的博客-优快云博客
$^ 所有依赖文件
$@ 表示所有目标文件
犯错经历:!!!!一定注意拼写,单词的拼写错误
1、第一行命令行写错
SRCS:=$(wildcard *.c)
//误写为以下方式
SRCS:=$(wildcard %.c) //通配符错误
会产生无法找到目标文件的现象。(这里感觉make运行第一行接下面指令的时候,没有找到匹配的.c 文件名)