makefike用来告诉make如何编译连接一个程序,MAKEfile里主要包括了5个方面的内容:显示规则、隐示规则、变量定义、文件指示和注释。
-
显示规则
显示规则说明了如何生成一个或多个目标。一条显示规则指明了目标文件、目标文件的依赖文件、生成或更新目标文件所使用的命令。显示规则的一般形式为:
target:depency files
command
其中,target是需要由make工具创建的目标体(target,目标体通常可以是空格分开多个文件名,也可以是一个标签。目标文件列表的文件名可以使用通配符,格式“A(M)”表示档案文件(linux下的静态库.a文件)的成员M。通常规则只有一个目标文件。depdency_files是要创建的目标体所依赖的文件,而“test.c”和“test.h”是重建“test.c”所要使用的文件。把规则所需要重建的文件称为规则的“目标”(test.o),而把重建目标所需要的文件称为规则的“依赖”(或者目标的依赖)。规则的第二行“gcc-c-g test.c”是规则的“命令”。它描述了如何使用规则中的依赖文件重建目标。
书写规则时。需要注意的以下几点:
规则的命令部分有两种书写方式:命令可以和目标、依赖文件放在同一行。命令在依赖文件列表后并使用分号(:)和依赖文件列表分开。命令在依赖文件列表的下一行,作为独立的命令行。当作为独立的命令行此时必须以“Tab”字符开始。在makefile中所有以“Tab”字符开始的行都会被认为命令来处理。
makefile中的符号“ ” 有 特 殊 的 含 义 。 他 表 示 变 量 或 者 函 数 的 引 用 , 在 规 则 中 需 要 使 用 符 号 “ ”有特殊的含义。他表示变量或者函数的引用,在规则中需要使用符号“ ”有特殊的含义。他表示变量或者函数的引用,在规则中需要使用符号“”的地方。需要书写成“$$”.
对于makefile中一个较长的行,我们可以使用反斜线“\”将其书写到几个独立的物理行上。规则的中心思想:目标文件的内容是由依赖文件决定。依赖文件的任何一处改动。将导致目前已经存在的目标文件的内容过期。规则的命令为重建目标提供了方法。这些命令运行在系统shell中。 -
隐式规则
因为make有自动推导的功能,可以根据目标文件的文件名,自动产生目标依赖文件和生成目标的命令。表4-15给出了常见的隐式规则目录。 -
变量定义
在makefie中需要定义一系列的变量,一般都是字符串,它类似于c语言的宏,当makefile被执行的 时候,其中的变量都会扩展到响应的引用位置上。 -
文件指示
包括三个部分,第一部分是在一个makefile中引用另一个makefile,就像C语言中的include一样包含进来;第二部分是指根据某些情况,指定Makefile中的有效成分,就像C语言中的预编译宏一样;第三部分是定义一个多行的命令。 -
注释
Makefile中的“#”字符后的内容被当做注释处理,如果某行以“#”字符开头,那么此行就是注释行。一般在书写makefile时建议将注释作为独立的一行。而不要和makefile中有其他意义的内容放在同一行。