指定目标
all
这个伪目标是所有目标的目标,其功能一般是编译所有的目标。
clean
这个伪目标功能是删除所有被make创建的文件。
install
这个伪目标功能是安装已编译好的程序,其实就是把目标执行文件拷贝到指定的目标中去。
print
这个伪目标的功能是例出改变过的源文件。
tar
这个伪目标功能是把源程序打包备份。也就是一个tar文件。
dist
这个伪目标功能是创建一个压缩文件,一般是把tar文件压成Z文件。或是gz文件。
TAGS
这个伪目标功能是更新所有的目标,以备完整地重编译使用。
check和test
这两个伪目标一般用来测试makefile的流程。
自动化变量
$@
表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,$@就是匹配于目标中模式定义的集合。
$^
所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。
$?
所有比目标新的依赖目标的集合。以空格分隔。
$+
这个变量很像$^,也是所有依赖目标的集合。只是它不去除重复的依赖目标。
$%
当规划的目标文件是库文件时,$%表示规则中的目标成员名。
例如,如果一个目标是foo.a(bar.o),那么,$%就是bar.o,$@就是foo.a。
如果目标不是函数库文件(Unix下是[.a],Windows下是[.lib]),那么其值为空。
$<
依赖目标中的第一个目标名字。如果依赖目标是以模式(即%)定义的,那么$<将是符合模式的一系列的文件集。注意,其是一个一个取出来的。
例子:
CCLD = g++ -Wall -g -o
CC = g++ -Wall -c
OBJS = SocketServer.o
TARGETS = 0928
.PHONY:all
all:$(TARGETS)
SocketServer.o:SocketServer.cpp
$(CC) $^
0928:$(OBJS) main.cpp
$(CCLD) $@ $^
@echo make success
.PHONY:clean
clean:
#rm -rf ${OBJS}
rm -rf *.o
rm -rf $(TARGETS)