目录

Makefile

执行时选项

-jN 指定N个进程同时编译,编译东西太多时用以提升速度
-k 发现错误也继续执行
-n 输出将要执行的步骤,但不执行
-f filename 将 filename 文件当做makefile
如未指定 all,则只创建它找到的第一个目标

变量

$? 当前目标所依赖的文件中比当前目标还新的
$@ 当前目标的名字
$^ 所有当前依赖的名字
$< 为第一个依赖文件

函数

wildcard

SRC = $(wildcard *.c ./foo/*.c)
搜索当前目录及 ./foo/ 目录下所有以 .c 结尾的文件,生成一个以空格为间隔的列表,赋值给 SRC,当前目录下的只有文件名,子目录下的还带有路径信息

notdir

FILENAME = $(notdir $(SRC))
去除所有的目录信息

patsubst

OBJ = $(patsubst %.c %.o $(FLIENAME))
在 FILENAME 中找到所有以 .c 结尾的文件,然后把 .c 转换成 .o 赋值给 OBJ
OBJ = $(FILENAME:.c=.o)
与使用 patsubst 效果相同