Gnu make手册学习【3】——编写makefile文件

来源:互联网 发布:苹果手机网络权限设置 编辑:程序博客网 时间:2024/05/16 17:17
3 编写makefile文件
3.1 makefile文件内容
主要包括5个方面:具体规则、隐含规则、定义变量、指令和注释。
3.2 makefile文件名
缺省文件名 GNUmakefile、makefile、Makefile。
也可使用命令参数
make -f makefile1 makefile2 makefileN
make -file=makefile1 makefile2 makefileN
3.3 包含其他makefile文件
include filenames...
注意:include 命令不以tab键开始。
搜索:如果makefile文件不以"/"开头,并且在当前目录下不能找到,则须另外搜寻目标。
首先,搜寻以"-|"或"--include-dir"参数指定的目录;
其次,搜寻"prefix/include"目录,通常为以下目录“/usr/local/include”、“/usr/gnu/include”、“/usr/include”。

include 执行过程中对不存在或不能重新创建的makefile文件,只做警告,make执行完后断定此为致命错误。
-include 指令对不存在或不能重新创建的makefile文件忽略,不产生错误信息。
sinclude 保持与其他make兼容。
3.4 变量MAKEFILES
makefiles文件的变量
3.5 makefile文件重新生成过程
首先读取所有的makefile文件,检查每一个目标,如果目标可更新,则更新之;
在所有检查完成后,如果有任意一个makefile文件发生变化,则make会情况所有记录,重新读入所有makefile。
注意:如上所述,构建make过程很容易就陷入一个死循环中;如果想重建一个文件,要小心哦。
书上说“如果要避免上述情况 的发生,一定注意不要依据双冒号规则使用命令并且不提供依赖重建任何makefile文件”,
我想就是要慎用双冒号规则,若必须用就最好同时使用依赖关系防止进入死循环。
3.6 重载其他makefile文件
待续
3.7 make读取makefile文件的过程
共分两阶段:
第一阶段、make 读取makefile文件,包括makefile本身,内置变量及值,隐含规则及具体规则,构造所有目标的依靠图表
和他们的依赖。
第二阶段、make 使用这些内置的组织决定需要重构的目标,以及使用必要的规则进行工作。
立即扩展与延时扩展:
第一阶段为立即扩展、非立即扩展即延时扩展。
判断规律:
a.变量赋值 附加操作“+=” 右变量在前面使用(:=)定义为简单扩展变量,则为立即扩展,其他为延时扩展。
b.条件语句 立即扩展
c.定义规则 目标和依赖部分为立即扩展,用于构造目标的命令通常为延时扩展。具体规则,格式规则,后缀规则,静态格式
规则以及简单依赖定义均使用该条规律。