跳转至

规则

通配符

符号 说明
* 任意字符
? 单个字符
[…] 符号集
[^…] 符号集取反

假想目标(Phony target)

不代表文件的工作目标。例如:clean .PHONY: clean 标准假想工作目标: all,install,clean,distclean,check

变量

$(variable-name)
变量名若为单一字符,则不需要加上括号。

自动变量

符号 描述
$@ 工作目标的文件名
$% 归档文件成员结构中的文件名元素。
$< 第一个必要条件的文件名
$? 时间搓在工作目标之后的所有必要条件,并以空格隔开这些必要条件
$^ 所有必要条件的文件名,并以空格隔开。会删除重复的文件名。
$+ 所有必要条件的文件名,并以空格隔开。包含重复的文件名。
$* 工作目标的主文件名。文件名由两部分组成,主文件名+后缀

VPATH = src:include;该变量是一系列文件夹名称,可供make查找文件 vpath pattern directory-list, 例如:"vpath %.c src" "vpath %.h include"

模式 模式规则中,%代表任意多个字符。可以放在模式中的任何地方,不过只能出现一次。

静态模式规则

Bash
1
2
$(OBJECTS): %.o: %.c
    $(CC) -c $(CFLAGS) $< -o $@

回显 以@开头,表示不显示要执行的命令。 执行 每行命令在单独的子shell中执行,互不依赖。可以用“;”隔开。

递归执行

Bash
1
2
3
4
5
subsystem:
    cd subdir && $(MAKE)

sybsystem:
    $(MAKE) -C subdir 

环境变量

使用export将变量加入环境变量中。

Bash
1
2
export VARIABLE…
unexport 
如果不带参数,则是将所有变量传入子make。