$(VAR) 使用变量,如果变量名为单字符,可以不使用圆括号或花括号
${VAR} 同上
$@ 当前目标文件
$* 删除了后缀的目标名
$《 依赖列表中,比当前目标更新的当前依赖名称(即第一个依赖文件)
$^ 整个依赖列表
$? 依赖列表中,比当前目标更新的当前依赖列表
CFLAGS 通常默认值是-O,但是可以被修改
未使用后缀规则的makefile文件变成如下:
OBJS=foo.o bar.o
SOURCES=foo.c bar.c
HEADERS=foo.h bar.h
CC=gcc
CFLAGS=-Wall -O -g
myprog : $(OBJS)
$(CC) $^ -o $@
foo.o : foo.c foo.h bar.h
$(CC) $(CFLAGS) –c $《 -o $@
bar.o : bar.c bar.h
$(CC) $(CFLAGS) –c $《 -o $@
而使用了后缀规则的makefile文件变成如下:
OBJS=foo.o bar.o
SOURCES=foo.c bar.c
HEADERS=foo.h bar.h
CC=gcc
myprog : $(OBJS)
$(CC) S^ -o $@
foo.o : foo.h bar.h
bar.o : bar.h
虚目标
假设一个项目最后需要产生两个可执行文件exec1和exec2,但两个文件是相互独立的,此时可使用假想目的all来达到效果。