Duangw

gmake

索引:

  1. 伪目标
  2. 变量
  3. 模式规则

由于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 $@