### GNU make中文手册知识点概述 #### 一、GNU make简介 GNU make 是一款在 Linux 和 Unix 系统中广泛使用的工具,它通过读取名为 Makefile 的文件来自动化构建过程。该工具支持复杂的构建逻辑,并且能够高效地管理大型项目的构建任务。 **1.1 Make之前基本知识** - **概述**:在使用 GNU make 之前,了解其工作原理至关重要。make 工具主要负责基于 Makefile 文件中的指令和规则来构建项目。 - **准备知识**:为了有效地使用 GNU make,用户需要掌握一定的基础知识,包括 Makefile 的语法结构、依赖关系的概念以及 shell 命令的基础知识等。 **1.2 GNU make介绍** - **Makefile简介**:Makefile 是一个文本文件,其中包含了 make 工具所需的所有指令和规则。这些规则定义了目标文件之间的依赖关系以及如何构建这些文件的方法。 - **Makefile规则介绍**:规则是 Makefile 中的核心部分,它们指定了如何生成特定的目标文件。规则通常由目标文件、依赖文件和一系列命令组成。 - **简单的示例**:通过一个简单的示例,可以清楚地展示 Makefile 的基本结构和功能。 - **make如何工作**:make 通过读取 Makefile 文件并根据其中定义的规则来确定哪些文件需要被重新构建。它会检查依赖文件的修改时间戳,并仅当必要时才执行构建命令。 - **指定变量**:Makefile 中可以定义变量,这些变量可以在规则和其他地方被引用,从而使得 Makefile 更加灵活和可配置。 - **自动推导规则**:GNU make 支持自动推导规则,即对于某些常见的文件类型,make 可以自动应用预定义的规则来构建目标文件,无需显式指定这些规则。 - **另类风格的 makefile**:除了标准格式之外,还可以使用不同的格式来编写 Makefile 文件,例如使用脚本语言来生成 Makefile 或使用更高级的语法结构。 - **清除工作目录过程文件**:Makefile 还可以用于清理工作目录中的中间文件,确保每次构建都是干净的。 #### 二、Makefile总述 - **Makefile的内容**:Makefile 文件通常包含以下元素:变量定义、规则定义、依赖关系声明等。 - **makefile文件的命名**:虽然默认情况下 make 工具会查找名为 `Makefile` 或 `makefile` 的文件,但也可以通过命令行选项指定其他文件名。 - **包含其它 makefile 文件**:可以通过 `include` 指令将一个 Makefile 文件中的内容合并到另一个文件中。 - **变量 MAKEFILES**:此变量用于存储当前正在处理的 Makefile 文件的名称列表。 - **变量 MAKEFILE_LIST**:这个变量与 `MAKEFILES` 类似,但包含了所有已被包含的 Makefile 文件的完整列表。 - **其他特殊变量**:Makefile 支持多种特殊变量,如 `$@`、`$<` 等,这些变量可以方便地引用规则中的目标和依赖项。 - **makefile文件的重建**:当 Makefile 文件本身发生变化时,make 工具可以自动重新读取并应用新的规则。 - **重载另外一个 makefile**:在构建过程中,可以通过特定的命令重新加载 Makefile 文件,这在动态更改构建规则时非常有用。 - **make如何解析 makefile 文件**: - **变量取值**:Makefile 支持多种方式来定义和使用变量,包括直接赋值和递归展开等。 - **条件语句**:Makefile 支持条件判断,可以根据不同的条件执行不同的规则。 - **规则的定义**:规则定义了如何构建目标文件,包括目标、依赖项和命令等组成部分。 #### 三、Makefile的规则 - **规则语法**:规则由目标、依赖项和命令组成。目标通常是希望构建的文件,而依赖项是指构建目标所需的其他文件。 - **依赖的类型**:Makefile 支持多种类型的依赖,包括直接依赖和间接依赖等。 - **文件名使用通配符**:通配符允许用户在 Makefile 中使用模式匹配来表示多个文件。 - **目录搜寻**:GNU make 提供了搜索目录的功能,这使得即使源文件不在当前目录中也能正确构建。 - **Makefile伪目标**:伪目标是在 Makefile 中定义的特殊目标,它们没有对应的文件,主要用于表示构建过程中的关键步骤。 - **强制目标**:强制目标是 Makefile 中的一个特殊概念,它允许用户指定即使依赖文件是最新的也要重新构建某个目标。 - **空目标文件**:空目标文件是一种特殊的伪目标,通常用于表示没有任何实际文件需要创建的情况。 - **Makefile的特殊目标**:Makefile 支持一些特殊目标,如 `.PHONY` 和 `.PRECIOUS` 等,这些目标具有特定的行为和用途。 - **多目标**:在一个规则中可以定义多个目标文件,这些文件具有相同的依赖关系和构建命令。 - **多规则目标**:某些目标可能需要多个规则来定义,每个规则负责不同的构建任务。 - **静态模式**:静态模式是一种特殊的规则形式,它允许使用模式匹配来定义一组相关的规则。 - **双冒号规则**:双冒号规则是一种特殊的规则形式,它可以用来定义多个目标共享相同的构建命令。 - **自动产生依赖**:GNU make 支持自动检测文件间的依赖关系,并根据这些依赖关系生成相应的 Makefile 规则。 #### 四、规则的命令 - **命令回显**:make 允许用户控制是否显示正在执行的命令。 - **命令的执行**:Makefile 中的命令行通常是 shell 命令,make 负责执行这些命令。 - **并发执行命令**:GNU make 支持并发执行多个命令,这对于提高构建速度非常有帮助。 - **命令执行的错误**:如果命令执行失败,make 会停止后续的操作。 - **中断 make 的执行**:用户可以使用特定的信号来中断 make 的执行。 - **make 的递归执行**:递归执行是指 make 在执行过程中调用自身,这种技术在处理复杂的构建过程时非常有用。 - **定义命令包**:命令包允许用户将多个命令组合成一个单元,以便在不同的规则中重复使用。 - **空命令**:空命令是 Makefile 中的一种特殊命令形式,通常用于表示不需要执行任何实际操作的情况。 #### 五、Makefile中的变量 - **变量的引用**:Makefile 支持多种变量引用方式,包括简单的引用和扩展的引用等。 - **两种变量定义(赋值)**: - **递归展开式变量**:这类变量在使用时会被递归展开,允许在变量定义中引用其他变量。 - **直接展开式变量**:这类变量在定义时立即展开,不会在使用时再次展开。 - **变量的高级用法**:Makefile 支持对变量进行更高级的操作,如替换引用和套嵌引用等。 - **变量取值**:Makefile 支持多种方式来获取变量的实际值。 - **如何设置变量**:Makefile 支持在文件内部和命令行上设置变量。 - **追加变量值**:Makefile 支持向现有变量添加新的值。 - **override指示符**:使用 override 指示符可以在命令行上覆盖 Makefile 中定义的变量值。 - **多行定义**:Makefile 支持在多行中定义变量。 - **系统环境变量**:Makefile 可以访问系统环境变量,并将其作为 Makefile 变量使用。 - **目标指定变量**:目标指定变量允许为特定的目标设置变量值。 - **模式指定变量**:模式指定变量允许使用模式匹配来为多个目标设置变量值。 #### 六、Makefile的条件执行 - **条件判断的基本语法**:Makefile 支持条件判断,可以根据不同的条件执行不同的规则。 - **标记测试的条件语句**:GNU make 提供了一种特殊的条件判断语法,称为标记测试,用于进行复杂的条件判断。 #### 七、make的内嵌函数 - **函数的调用语法**:Makefile 支持多种内嵌函数,这些函数可以用来处理字符串、列表等数据。 - **文本处理函数**:Makefile 提供了一系列文本处理函数,用于处理字符串和列表等数据。 - **$(subst FROM,TO,TEXT)**:此函数用于替换字符串中的特定子串。 - **$(patsubst PATTERN,REPLACEMENT,TEXT)**:此函数用于根据模式替换文本中的子串。 - **$(strip STRINT)**:此函数用于移除字符串中的前导和尾随空白字符。 - **$(findstring FIND,IN)**:此函数用于在字符串中查找特定子串的位置。 - **$(filter PATTERN…,TEXT)**:此函数用于从列表中筛选出符合特定模式的元素。 - **$(filter-out PATTERN,TEXT)**:此函数用于从列表中移除符合特定模式的元素。 - **$(sort LIST)**:此函数用于对列表中的元素进行排序。 - **$(word N,TEXT)**:此函数用于从列表中提取第 N 个元素。 - **$(wordlist S,E,TEXT)**:此函数用于从列表中提取从第 S 个元素到第 E 个元素之间的子列表。 - **$(words TEXT)**:此函数用于返回列表中的元素数量。 - **$(firstword TEXT)**:此函数用于返回列表中的第一个元素。 - **$(lastword TEXT)**:此函数用于返回列表中的最后一个元素。 - **$(basename FILE)**:此函数用于返回文件名的基名,即去掉文件扩展名后的部分。 - **$(notdir FILE)**:此函数用于返回文件名的非目录部分,即去掉路径后的文件名。 - **$(dir FILE)**:此函数用于返回文件名的目录部分。 - **$(suffix FILE)**:此函数用于返回文件名的扩展名。 - **$(addprefix PREFIX,TEXT)**:此函数用于在列表中每个元素前加上前缀。 - **$(addsuffix SUFFIX,TEXT)**:此函数用于在列表中每个元素后加上后缀。 - **$(wildcard PATTERN)**:此函数用于返回匹配给定模式的所有文件名。 以上是对《GNU make中文手册》中提到的关键知识点的总结。GNU make 是一个强大的工具,熟练掌握其使用方法可以极大地提高软件开发的效率。
剩余166页未读,继续阅读
- 粉丝: 30
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JAVAspringboot学生课程查询系统源码数据库 MySQL源码类型 WebForm
- 伯克利大学机器学习-14Optimization methods for learning [John Duchi]
- springboot4d8g9.sql
- (源码)基于SpringBoot和SpringSecurity的系统组织架构管理.zip
- JAVA的Springboot果蔬配送商城源码数据库 MySQL源码类型 WebForm
- (源码)基于C++的简单关系型数据库管理系统.zip
- (源码)基于Python和MMDetection框架的多模态目标检测系统.zip
- LitJson(0.19.0版本,适用于.NetStandard2.0 2.1)
- LitJson(0.19.0版本,适用于.NetStandard1.5)
- (源码)基于ROS的咖啡机器人控制系统.zip