控制器 寄存器 内存 集成电路 晶体管 运算器
主页 正文

Makefile核心解析与组成部分

Makefile 详解

默认情况下,当您使用“make”命令时,“make”会在当前目录中查找名为“makefile”或“makefile”的文件。
如果找到,则读取文件的第一个目标。
假设找到的目标是“edit”,它将被用作默认目标。
如果目标“edit”不存在,或者对.o文件的依赖比“edit”慢,则相应的命令将运行相应的命令生成“edit”文件。
如果 .o 文件已经存在,则“make”取决于 .o 文件的目标并继续执行 Generation 命令。
整个依赖过程通过“make”逐层跟踪,直到生成第一个目标文件。
在搜索过程中,如果发生错误,“Make”将退出,要么是定义命令错误,要么是编译失败。
运行“make”的步骤如下。
读取所有makefile,找到它们包含的其他makefile,导出隐藏规则,分析所有规则,为所有目标文件创建依赖链,确定需要生成的目标并运行re-gene生成命令。
MakeFile 文件名未修改。
通过 `make-f` 或 `make-file` 指定特定的 makefile。
您可以使用 MakeFile 中的“include”关键字包含其他 makefile。
“make”查找指定目录或当前目录中包含的文件。
如果未找到文件,“make”会生成警告信息,但会继续加载其他文件。
使用“-stinclude”可以忽略继续执行,包括错误。
MakeFile的编写规则分为两部分:如何生成依赖关系和目标。
规则格式,例如“目标:proRequisites”。
文件搜索策略非常适合通过路径前缀设置“VPATH”变量,以避免在当前目录中发现并提高效率。
“伪目标”不是文件,而是用于特定操作。
使用“.phony”将目标声明为伪目标。
静态模式用于定义目标集,例如“objects = foo.obar.o”。
“object”是目标集,`foo.o`,`bar.o`取决于目标。
`define` 和 `endef` 定义一个命令包,例如“definerun-yacc”。
定义的`$(run-yacc)`参数命令包。
不同的变量是多种多样的,例如`foo = $(bar)`或`x:=laterx`。
您想使用`吗? =`如果没有分配则自动分配。
字符串替换函数`$(subs,)、模式字符串替换`$(patsubst,)、移至空格$(strip)、字符串`$(findstring,)`过滤、)`和`过滤掉、)`、排序`$(sort)`,取单词`$(word,)`,单词串`$(wordlist,)`,统计个数`$`$(words)`,第一个单词`$(firstword) `,取目录`$(dir)`,文件`$(notdir)`,后缀`$(suffix)`,副线`$(basename)`,添加后缀`$(取addsuffix,)`,前缀`$( addpre fix,)`,连接字符串`$(join,)`。
“foreach”函数循环遍历日历字符串的单词并返回由每个单词组成的字符串。
“if”函数确定表达式是 true 还是 false,并返回一组 true 或 false。
“call”函数调用自定义函数表达式来传递参数。
“shell”函数执行操作系统命令并返回结果。
`$(error)` 函数生成致命错误信息。

makefile由什么组成?

一个makefile主要有以下五个组成部分。
显式规则:显式规则描述生成一个或多个目标文件的方法和步骤。
这一点在编写make文件时表现得很清楚,包括要生成的文件、生成文件的依赖文件以及生成的命令。
隐式规则:由于make工具具有自动推导功能,因此只有在编写make文件时才可以使用这些规则来编写make文件。
然后 make 工具本身会自动导出要使用的规则。
变量定义:make工具通常支持这些变量定义为字符串,因此make文件中的变量更像是C语言中的宏,当执行make文件时,其中的变量被扩展到相应的引用位置。
文件指令:包括三部分,一是在一个文件中引用另一个make文件,就像C语言中包含的那样;二是指根据一定的条件判断makefile的有效部分,就像tif一样。
在C语言中已经编译的选项还有一个就是指定多行命令。
注意:make文件中支持行注释,需要特别注意。
makefile 中的注释与 shell 脚本中的注释相同,注释使用“#”字符。
如果需要在makefile中使用“#”字符,可以用“\”进行转义。
例如,“\#”代表“#”字符。
makefile 文件的文件名最恰当的命名为 makefile 或 Makefile。
因为默认情况下,make命令会在当前目录中按顺序查找这两个文件进行解释。
用户还可以自定义makefile的文件名,例如Make.makefile、Make.admin等。

热门资讯
数控机床刀尖补偿与刀具半径补偿详解
CADBAK转DWG:转换与打开指南
51单片机编程代码大全
变频器输出频率测量方法解析
Win7系统硬盘分区合并教程
加工中心i5坐标清零方法与G代码编程技巧详解
数控加工中心G代码详解与实例解析
西门子博途PLC位逻辑运算指令详解