基本格式
1 | 目标...:依赖... |
注意为Tab,不得出现空格
变量
系统变量
$(变量名)
自定义变量
- = 延迟变量(不调用不改变)
- := 立即赋值
- ?= 空赋值
- += 追加赋值
自动化变量
- $< 第一个依赖文件
- $^ 全部的依赖文件,若目标中有重复文件将只保留一份
- $@ 目标的集合
- $% 当目标为函数库的时候表示规则中的目标成员名。若目标不是函数库文件则值为空
- $? 所有比目标新的依赖目标集合,以空格隔开
- $* 表示目标模式中”%”及其以前的部分
- $+ $^类似但不主动除去
伪目标
仅执行命令的目标与目录下存在的文件名冲突时,例如clean
声明方式:1
.PHONY:clean
模式规则
% 长度任意的非空字符串,当”%”出现在目标时,目标中的”%”决定依赖中的”%”值条件分支
1
2
3
4
5
6ifeq (var1,var2)
...
else
...
endif1
2
3
4
5
6ifneq (var1,var2)
...
else
...
endif函数
模式替换函数patsubst
$(patsubst %.c,%.o,x.c.c bar.c) 将“x.c.c bar.c”中以“.c”结尾的单词替换成“.o”取文件名函数notdir
$(notdir src/foo.c hacks)取出路径中非目录的部分wildcard 获取匹配模式文件名函数
$(wildcard *.c)返回当前目录下所有“.c”源文件列表foreach循环函数
$(foreach VAR,LIST,TEXT)LIST中以空格间隔的单词逐个赋值给VAR进行TEXT中的运算