makefile的常用函数及特殊字符

makfile的常用函数
下面的常用函数掌握以下,也不用记得住,用时候过来取就行,基本就没问题了

$(wildcard *.c) #同一类型的文件 *.h *.cpp等
$(wildcard $(SRC)/*.c) #同一类型的文件 *.h *.cpp等

$(patsubst *.c, *.o, $(SRC)) #SRC 变量中的所有.c替换为.o
$(patsubst %, -I %, $(INC))  #INC 变量中的所有值前加I

$(foreach dir, $(SRC), $(wildcard $(dir)/*.c)) #提取SRC目录(包含子目录)下的所有c文件

$(notdir $(CFILES)) #去掉CFILES变量的目录信息 /test/hello.c  => hello.c

OBJS := $(addprefix $(OBJ_DIR)/,$(OBJS)) #给 OBJS 加路径前缀,使其变成完整路径的形式

OBJS = $(SRCS:.c=.o) #根据.c推导出.o

OBJS = $(filter %.o %.c, $(OBJS))     # 返回OBJS中的.o和.c文件 ,过滤函数: $(filter <pattern...>,<text>),保留符合模式 <pattern> 的字符串

makefile的常用特殊字符

$< #第一个依赖文件

$^ #所有依赖文件

$@ #目标文件

$? #代表当前目标所依赖的文件列表中比当前目标文件还要新的文件

makfile的“等号区别”

=  #是最基本的赋值
:= #是覆盖之前的值
?= #是如果没有被赋值过就赋予等号后面的值
+= #是添加等号后面的值

#make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:

x = foo
y = $(x) bar
x = xyz

#在上例中,y的值将会是 xyz bar ,而不是 foo bar 

x := foo
y := $(x) bar
x := xyz

#y的值将会是 foo bar ,而不是 xyz bar 了

posted @ 2023-01-04 10:45  tccxy  阅读(80)  评论(0编辑  收藏  举报