许多程序员都会在自己的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和gcc

    gcc –MM

    生成项目的依赖关系