目录
1.什么是make,makefile,作用
2.基本概念:目标,依赖,命令
3.makefile基本语法
4.变量:定义和使用,自动变量
5.常用函数wildcard
6.隐含规则
7.调用make
———————————————————————————————————————————
正文开始–>>
1.什么是make,makefile,作用
make 是一个自动化构建工具,根据文件的时间戳判断哪些文件需要重新编译,从而减少重复编译的时间。
Makefile 是 make 读取的配置文件,定义了构建规则、依赖关系和执行命令。
2.基本概念:目标,依赖,命令
一个 Makefile 主要由规则组成,每条规则的格式如下:
目标: 依赖项
命令
-
目标(target):通常是要生成的文件名,也可以是伪目标(如 clean)。
-
依赖项(prerequisites):生成目标所依赖的文件或其他目标。
-
命令(recipe):由 Shell 执行的命令,必须以 Tab 键开头。
示例:
main: main.cc
g++ -o main main.cc
执行make时,若main.cc比main新,则执行g++命令。
3.makefile基本语法
-
注释:以 # 开头。
-
多目标规则:一个规则可生成多个目标。
-
伪目标:不代表真实文件,常用于清理等操作,需声明为 .PHONY。
示例:
.PHONY: clean
clean:
rm -f main *.o
4.变量:定义和使用,自动变量
-
定义变量:变量名 = 值 或 变量名 := 值(立即展开)。
-
使用变量:$(变量名) 或 ${变量名}。
-
自动变量:
- $@:目标
- $^:所有目标依赖
- $<:目标依赖列表中的第一个依赖
- $?:所有目标依赖中被修改过的文件
示例:
CC = gcc
CFLAGS = -Wall
main: main.cc
$(CC) $(CFLAGS) -o $@ $^
5.常用函数wildcard
- 通配符:$(wildcard 模式),如 $(wildcard *.c)
- 模式替换:$(patsubst 模式,替换,文本),如 $(patsubst %.c,%.o,$(wildcard *.c))
- 文件操作:$(addprefix 前缀,列表)、$(addsuffix 后缀,列表) 等。
6.隐含规则
make 内置了一些常用规则,例如从 .c 文件生成 .o 文件的规则:
%.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
也可以使用内置变量CC,CFLAGS等自定义
7.调用make
makefile示例:
CC = g++
CFLAGS = -Wall
SRCDIR = src
OBJDIR = obj
SRCS = $(wildcard $(SRCDIR)/*.cc)
OBJS = $(patsubst $(SRCDIR)/%.cc,$(OBJDIR)/%.o,$(SRCS))
TARGET = myapp
$(TARGET): $(OBJS)
$(CC) -o $@ $^
$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)
$(CC) $(CFLAGS) -c $< -o $@
.PHONY: clean
clean:
rm -rf $(OBJDIR) $(TARGET)
常用make命令选项:
-
make:默认执行第一个目标。
-
make 目标:指定构建的目标。
-
make -n:打印要执行的命令但不执行(dry run)。
-
make -B:强制重新编译所有目标。
-
make -d:打印调试信息。
-
make -jN:并行执行 N 个任务
好了,关于make,makefile基本的使用就到这里结束了,希望各位大佬点个赞,拜!~~~






