NOTE:
Makefile 必须使用制表符,而不是空格进行锁紧。
语法
1 | targets: prerequisites |
- targets 目标
- prerequisites 先决条件
- commands 命令
目标
all 目标
要制作多个目标,而你想让所有目标都运行?
- 制作一个
all目标。 - 由于这是列出的第一个规则,因此如果调用
make而未指定目标,则默认情况下它将运行。
1 | all: one two three |
多个目标
当一个规则有多个目标时,将为每个目标运行命令。
1 | all: f1.o f2.o |
自动变量和通配符
*通配符
- 在你的文件系统中搜索匹配的文件名。 建议始终将其包装在
wildcard函数中
1 | # 打印出每个.c文件的文件信息 |
%通配符
- 在“匹配”模式下使用时,匹配字符串中的一个或多个字符。
- 在“替换”模式下使用时,它会获取匹配的词干,并替换字符串中的词干。
%最常用于规则定义和某些特定函数中。
$@
- 构建目标
1 | main.o: main.c |
此处 $@ 就表示目标 main.o。
$?
- 比目标文件更新的所有依赖文件
1 | main: main.o func.o |
若 main.o 或 func.o 比 main 的更新,则会被包含在 $? 中。
$^
- 所有的依赖文件
1 | main: main.o func.o |
这里的 $^ 就表示所有的依赖文件,即 main.o 和 func.o。
$<
- 第一个依赖条件
1 | main: main.o func.o |
此处 $< 就表示第一个依赖文件,即 main.o。