gmake
索引:
由于make的共性,详细情况可参见“Unix编程工具”中make的介绍,下面仅仅列出不同的地方。
1.伪目标
伪目标就是没有依赖体的目标,如clean。因为它没有依赖体,所以它的命令不会自动执行,因为make总认为目标体是最新的而不会执行任何操作。要执行,必须输入make clean。
但是,如果确实存在clean这样一个文件,则make clean也不会执行操作,解决方法是使用.PHONY。
.PHONY的依赖体文件的含义和通常一样,但是make不检查是否存在有文件名和依赖体中的一个名字相匹配的文件,而是直接执行与之相关的命令。
如:
.PHONY: clean clean: rm *.o
2.变量
(1).递归展开变量
如:
TOPDIR=/home/myproject SRCDIR=$(TOPDIR)/src
但是,
CC=gcc CC=$(CC) -o
会出现一个无限循环。解决方法是使用简单展开变量。
(2).简单展开变量
CC := gcc -o CC += -O2
(3).自动变量
变量 | 说明 |
---|---|
$@ | 规则的目标所对应的文件名 |
$< | 规则中的第一个相关文件名 |
$^ | 规则中所有相关文件的列表,以空格为分隔符 |
$? | 规则中日期新于目标的所有相关文件的列表 |
$(@D) | 目标文件的目录部分(如果目标在子目录中) |
$(@F) | 目标文件的文件名部分(如果目标在子目录中) |
3.模式规则
使用%。如:
%.c: %c $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@