1. 规则
格式:
target: depends
<tab>command
2. 伪目标
关键字.PHONY
表示它后面的目标都是伪目标
格式:
.PHONY: target1 targe2
3. 变量
自定义变量
格式:变量名 := 值
引用:$(变量名)
自动变量
在使用时,自动替换特定的值
自动变量有
$@
当前规则的目标文件
$^
当前规则的所有依赖文件
$<
当前规则的第一个依赖文件
$?
规则中日期比目标文件新的所有依赖文件(逗号隔开)
$(@D)
目标文件的目录名
$(@F)
目标文件的文件名
预定义变量
内部事先定义好的,有固定的值。
AR
归档维护程序的名称,默认值为 ar
。
AS
汇编程序的名称,默认值为 as
。
CC
C编译器的名称,默认值为 cc
。
CPP
C预编译器的名称,非C++,默认值为 $(CC) -E
。
CXX
C++编译器的名称,默认值为 g++
。
ARFLAGS
归档维护程序的选项。
ASFLAGS
汇编程序的选项。
CFLAGS
C编译器的选项。
CPPFLAGS
C预编译器的选项,非C++。
CXXFLAGS
C++编译器的选项。
环境变量
可以使用export
命令查询系统所有环境变量。
4. 规则
隐含规则
name.o
文件自动依赖name.c
或name.cc
文件,无需编写name.o:name.c
规则。
模式规则
如:%.o: %.cpp
匹配任何与目标文件同名且后缀为cpp
的依赖文件。
5. 函数
wilecard
搜索当前目录下的文件名
patsubst
字符串替换函数
addprefix
加前缀函数
notdir
去掉文件列表中所有文件的路径,只保留文件名
示例:
$(wildcard *.c) # 来获取当前目录下的所有的.c文件列表
$(wildcard dir/*.c) # 获取./dir目录下的所有.c文件列表
$(filter-out PATTERN...,TEXT) # 过滤掉字串“TEXT”中所有符合模式“PATTERN”的单词,保留所有不符合此模式的单词(注意路径)
$(patsubst %.c,%.o,$(dir)) # 把$(dir)中的变量符合后缀是.c的全部替换成.o
$(notdir $(src)) # 去除$(src)中所有文件的路径,只保留文件名
$(addprefix $(OBJDIR)/,$(OBJS)) # 加前缀函数,在$(OBJS)的每一个文件前加上前缀$(OBJDIR)/