目录
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基本的使用就到这里结束了,希望各位大佬点个赞,拜!~~~