### GNU make v3.80中文手册知识点梳理 #### 一、概述 - **GNU make** 是一个自动化构建工具,广泛应用于软件项目管理和自动化编译过程中。 - **版本**: 此文档介绍了GNU make v3.80版本的功能与用法。 - **作者**: 徐海兵,对原有版本进行了整理和修正。 #### 二、GNU make介绍 - **Makefile**: Makefile是GNU make读取的文件,用于描述项目中各个文件之间的依赖关系以及如何构建这些文件的规则。 - **简介**: Makefile包含了构建项目所需的所有指令和规则。 - **规则**: 规则定义了目标文件如何由源文件构建。 - **示例**: 提供了一个简单的Makefile示例来帮助理解其基本结构。 - **工作原理**: 介绍了make如何根据Makefile中的规则构建目标文件的过程。 - **变量指定**: 变量可以在Makefile中被定义并用于简化规则的编写。 - **自动推导规则**: GNU make可以根据文件扩展名自动推导出构建规则。 - **另类风格的Makefile**: 介绍了一些非标准的Makefile编写方法。 - **清理过程文件**: Makefile可以包含用于清理临时文件的规则。 #### 三、Makefile总述 - **内容**: Makefile通常包含变量定义、规则等。 - **命名**: Makefile文件的默认名称通常是`Makefile`或`makefile`。 - **包含其他文件**: Makefile可以通过特定指令包含其他Makefile文件,便于组织复杂的构建逻辑。 - **变量MAKEFILES**: 控制make如何查找其他Makefile文件。 - **变量MAKEFILE_LIST**: 包含make执行时使用的Makefile文件列表。 - **特殊变量**: 如`$@`代表目标文件等。 - **重建**: 介绍如何使make重新读取Makefile文件。 - **重载**: 在make执行过程中动态加载新的Makefile文件。 - **解析**: 解释make如何解析Makefile文件中的规则和变量。 - **变量取值**: 如何在Makefile中使用变量。 - **条件语句**: 条件语句允许Makefile根据不同的条件执行不同的规则。 - **规则定义**: 规则的格式和语法。 #### 四、Makefile的规则 - **规则语法**: 规则的格式包括目标、依赖和命令。 - **依赖类型**: 文件依赖、模式依赖等。 - **通配符**: 在文件名中使用通配符以匹配多个文件。 - **统配符使用**: 示例展示如何使用通配符匹配文件。 - **存在的缺陷**: 使用通配符可能引入的错误。 - **函数wildcard**: 用于生成匹配通配符的文件列表。 - **目录搜索**: 当依赖文件不在当前目录时,make如何搜索其他目录。 - **一般搜索**: 通过VPATH变量设置搜索路径。 - **选择性搜索**: 使用`vpath`关键字指定搜索路径。 - **机制**: 深入介绍make如何根据VPATH和其他设置来搜索依赖文件。 - **命令行**: 命令行选项对搜索目录的影响。 - **隐含规则**: 隐含规则如何与目录搜索相结合。 - **库文件**: 对于库文件的搜索方式。 - **伪目标**: 用于标记任务而非实际文件的目标。 - **强制目标**: 没有依赖和命令的目标,通常用于标记构建的阶段。 - **空目标文件**: 仅存在以表示构建完成的文件。 - **特殊目标**: 如`.PHONY`等,用于标记伪目标。 - **多目标**: 单个规则可以有多个目标。 - **多规则目标**: 多个规则可以指向同一个目标。 - **静态模式**: 一种模式匹配规则,允许使用通配符来匹配文件名的一部分。 - **双冒号规则**: 允许一个目标有多个规则,每个规则都独立运行。 - **自动产生依赖**: 自动生成目标文件与源文件之间的依赖关系。 #### 五、规则的命令 - **命令回显**: 显示命令前缀。 - **命令执行**: 如何执行Makefile中的命令。 - **并发执行**: 并发执行多个命令以提高构建速度。 - **错误处理**: 如何处理命令执行失败的情况。 - **中断执行**: 在命令执行失败后如何控制make的行为。 - **递归执行**: make可以在子进程中再次执行自身,这称为递归执行。 - **变量MAKE**: 控制递归执行的选项。 - **递归与变量**: 如何在递归执行时使用变量。 - **命令行选项**: 递归执行时传递命令行选项的方法。 - **-w选项**: 使make在每次执行之前更改到目标文件所在的目录。 - **命令包**: 将一组相关的命令封装在一起。 - **空命令**: 不执行任何操作的命令。 #### 六、Makefile中的变量 - **变量引用**: 如何在Makefile中引用变量。 - **变量定义**: 变量可以通过赋值来定义。 - **递归展开式变量**: 在展开时递归地计算变量值。 - **直接展开式变量**: 定义时立即计算变量值。 - **定义空格**: 如何在变量中包含空格。 - **“?=”操作符**: 如果未定义,则定义该变量;如果已定义,则不修改。 - **高级用法**: 包括变量替换和嵌套引用。 - **替换引用**: 替换变量值中的某些部分。 - **套嵌引用**: 在变量值中嵌套使用其他变量。 - **变量取值**: 变量的值如何被计算和使用。 - **设置变量**: 如何在Makefile中定义变量。 - **追加变量值**: 在已有的变量值后面追加新值。 - **override指示符**: 用于在命令行上覆盖Makefile中的变量定义。 - **多行定义**: 如何在多行定义一个变量。 - **系统环境变量**: 如何在Makefile中使用环境变量。 - **目标指定变量**: 变量的值可以基于目标的不同而不同。 - **模式指定变量**: 变量的值可以基于文件名模式的不同而不同。 #### 七、Makefile的条件执行 - **条件判断**: 根据不同的条件执行不同的规则。 - **基本语法**: 如何使用条件语句。 - **标记测试**: 使用条件语句进行标记测试。 #### 八、make的内嵌函数 - **函数调用**: 函数的调用语法。 - **文本处理函数**: 用于处理文本字符串的各种函数。 - **$(substFROM,TO,TEXT)**: 替换字符串中的某个部分。 - **$(patsubstPATTERN,REPLACEMENT,TEXT)**: 根据模式匹配替换字符串。 - **$(stripSTRINT)**: 删除字符串两端的空白字符。 - **$(findstringFIND,IN)**: 检测一个字符串是否包含另一个字符串。 - **$(filterPATTERN…,TEXT)**: 从列表中筛选出符合模式的元素。 - **$(filter-outPATTERN,TEXT)**: 从列表中排除符合模式的元素。 - **$(sortLIST)**: 对列表进行排序。 - **$(wordN,TEXT)**: 返回字符串中第N个单词。 - **$(wordlistS,E,TEXT)**: 返回字符串中从S到E的单词列表。 - **$(wordsTEXT)**: 返回字符串中单词的数量。 - **$(firstwordTEXT)**: 返回字符串中的第一个单词。 - **$(lastwordTEXT)**: 返回字符串中的最后一个单词。 - **$(basenameFILE)**: 返回文件名的基础部分,去除扩展名。 - **$(dirFILE)**: 返回文件所在目录的路径。 - **$(notdirFILE)**: 返回文件名的部分,去除路径。 - **$(suffixFILE)**: 返回文件名的扩展名部分。 以上内容是对GNU make v3.80中文手册的主要知识点的概括,旨在帮助读者理解和掌握Makefile的编写技巧以及GNU make的高级特性。
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/e8e01eb3463c463e80eae3dae3b0a8cf_thyman.jpg!1)
- 粉丝: 9
- 资源: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)