许多程序员都会在自己的Makefile文件中将第一个目标定义为all然后再列出其他从属目标。这个约定可以明确地告诉make,在未指定特定目标时,默认应该创建哪个目标。
1 依赖关系先写目标的名称,然后紧跟着一个冒号,接着是空格或TAB,最后是空格或TAB隔开的文件列表。如果想一次创建多个文件,可以利用伪目标all。假如程序由myapp和手册myspp.1组成,可以用下面的语句
义:
all: myall myapp.1
2 规则在Makefile中空格和TAB是有区别的。规则所在行必须以TAB开头。如果Makefile中的某行以空格结尾,这可能会导致make命令的失败
3 注释#开头为注释
4 Makefile中的宏使用语句MACRONAME=value定义宏,$(MACRONAME)或${MACRONAME}引用宏。命令行的宏定义覆盖Makefile中的宏定义。在Makefile之外用宏时,宏定义必须以单参数的形式传递,所以避免在宏定义中使用空格或给宏定义加上引号。
make的内置宏会随着Makefile的处理进展而发生变化。
宏 | 定义 |
$? | 当前目标所依赖的文件列表中比当前目标文件还要新的文件 |
$@ | 当前目标的名字 |
$< | 当前依赖文件的名字 |
$* | 不包括后缀名的当前依赖文件的名字 |
两个特殊字符(出现在命令前):
- : 忽略所有错误
@ :不要将该命令显示在标准输出上
5 多个目标 6 内置规则推导规则,make -p查看所有的内置规程
7 后缀和模式规则make也支持通配符语法的模式规则
8 用make管理函数库该规则常见形式
.c.a:
$(CC) –c $(CFLAGS) $<
$(AR) $(ARRFLAGS) $@ $* .o
$(AR) 的默认取值是ar
$(ARRFLAGS)的默认取值是rv
9 makefile和子目录mylib.a:
(cd mylibdirectory;$(MAKE))
用括号将两个命令括起来,确保他们只被一个单独的shell处理
10 GNU make和gccgcc –MM
生成项目的依赖关系