### makefile参考手册知识点梳理 #### 一、概述与预备知识 - **概述**:`makefile`是一种用于自动化构建程序和其他数据集的文件。它主要用于C语言项目,但也可以应用于其他类型的项目。 - **预备知识**:在深入学习makefile之前,需要具备基本的编程知识,特别是对命令行工具的熟悉,以及对于编译链接过程有一定的了解。 #### 二、GNU make介绍 - **Makefile简介**:Makefile是make工具读取的文件,用来指导make如何构建项目。 - **Makefile规则介绍**: - 规则定义了目标文件如何生成。 - 包括目标、依赖项和命令等元素。 - **简单的示例**:通过一个简单的Makefile示例来展示如何定义目标、依赖项和命令。 - **make的工作流程**:make根据Makefile中的规则确定需要执行的操作顺序,并执行相应的命令。 - **指定变量**:可以在Makefile中定义变量,这些变量可以被规则中的命令或其他变量引用。 - **自动推导规则**:make支持自动推导规则,即根据文件扩展名推断出编译命令。 - **另类风格的makefile**:除了标准的Makefile格式外,还可以采用其他风格来编写makefile文件。 - **清除工作目录的过程文件**:如何使用Makefile清理编译过程中产生的临时文件。 #### 三、Makefile总述 - **Makefile的内容**:Makefile通常包含一系列规则,每个规则定义了如何生成特定的目标文件。 - **makefile文件的命名**:Makefile文件的默认名称为`Makefile`或`makefile`,但也可以通过命令行参数指定其他名称。 - **包含其他makefile文件**:通过`include`指令可以将其他makefile文件的内容合并到当前makefile文件中。 - **变量MAKEFILES**:用于指定要包含的makefile文件列表。 - **变量MAKEFILE_LIST**:记录make命令读取的所有makefile文件的路径。 - **其他特殊变量**:如`MAKE`, `?`等,用于控制make的行为。 - **makefile文件的重建**:如何触发makefile文件本身的重新构建。 - **重载另一个makefile**:如何在一个makefile中包含并覆盖另一个makefile的内容。 - **make如何解析makefile文件**: - **变量取值**:解释make如何解析和展开变量。 - **条件语句**:介绍如何使用条件语句来控制makefile的执行逻辑。 - **规则的定义**:makefile中的规则定义方法。 #### 四、Makefile的规则 - **规则语法**:介绍Makefile中规则的基本语法结构。 - **依赖的类型**:包括直接依赖和间接依赖。 - **文件名使用通配符**:如何使用通配符匹配多个文件。 - **统配符使用举例**:通过示例演示通配符的应用场景。 - **通配符存在的缺陷**:讨论通配符可能导致的问题。 - **函数wildcard**:介绍`wildcard`函数的使用。 - **目录搜寻**:make如何在不同目录下寻找文件。 - **一般搜索**:通过`VPATH`变量配置搜索路径。 - **选择性搜索**:使用`vpath`关键字指定搜索路径。 - **目录搜索的机制**:详细解释搜索路径的内部实现原理。 - **命令行和搜索目录**:命令行选项如何影响搜索路径。 - **隐含规则和搜索目录**:隐含规则与目录搜索的关系。 - **库文件和搜索目录**:如何搜索库文件。 #### 五、规则的命令 - **命令回显**:make是否显示执行的命令。 - **命令的执行**:make如何执行命令行。 - **并发执行命令**:如何并行执行多个命令。 - **命令执行的错误**:make如何处理命令执行时的错误。 - **中断make的执行**:如何在make执行过程中中断其运行。 - **make的递归执行**:如何在一个makefile中调用另一个make。 - **变量MAKE**:介绍`MAKE`变量的作用。 - **变量和递归**:变量在递归make调用中的作用。 - **命令行选项和递归**:命令行选项如何影响递归make调用。 - **-w选项**:使用`-w`选项监视文件系统的更改。 - **定义命令包**:如何将多个命令组合成一个命令包执行。 - **空命令**:make如何处理空命令。 #### 六、Makefile中的变量 - **变量的引用**:如何在Makefile中引用已定义的变量。 - **两种变量定义**:递归展开式变量和直接展开式变量的区别。 - **递归展开式变量**:变量在使用时才进行展开。 - **直接展开式变量**:变量定义时立即展开。 - **定义一个空格**:如何定义包含空格的变量。 - **“?=”操作符**:如何使用条件赋值操作符。 - **变量的高级用法**: - **变量的替换引用**:如何使用变量替换功能。 - **变量的套嵌引用**:如何嵌套引用变量。 - **变量取值**:make如何确定变量的最终值。 - **如何设置变量**:通过不同的方式设置变量。 - **追加变量值**:如何向现有变量添加新值。 - **override指示符**:如何覆盖变量的默认值。 - **多行定义**:如何在Makefile中定义多行的变量值。 - **系统环境变量**:如何在Makefile中使用环境变量。 - **目标指定变量**:如何为特定目标定义变量。 - **模式指定变量**:如何根据文件名模式定义变量。 #### 七、Makefile的条件执行 - **条件判断的基本语法**:如何使用条件语句来控制Makefile的执行流程。 - **标记测试的条件语句**:介绍使用条件语句进行标记测试的方法。 #### 八、make的内嵌函数 - **函数的调用语法**:make中函数的调用方法。 - **文本处理函数**: - **$(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)**:获取字符串中的最后一个单词。 - **$(notdir FILE)**:去除文件路径中的目录部分。 - **$(dir FILE)**:获取文件路径中的目录部分。 - **$(basename FILE)**:获取文件的基本名(去掉后缀)。 - **$(suffix FILE)**:获取文件的后缀。 - **$(addprefix PREFIX, TEXT)**:在每个字符串前加上前缀。 - **$(addsuffix SUFFIX, TEXT)**:在每个字符串后加上后缀。 - **$(call FUNCTION, ARGUMENTS)**:调用函数。 - **$(if CONDITION, THEN-PART, ELSE-PART)**:条件表达式。 通过以上知识点的梳理, 可以看到`makefile`不仅是一个简单的自动化构建工具, 而且还具有非常强大的功能, 可以帮助开发者高效地管理复杂的项目构建流程。
![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)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/octet-stream](https://img-home.csdnimg.cn/images/20210720083646.png)
![tar](https://img-home.csdnimg.cn/images/20210720083646.png)
![none](https://img-home.csdnimg.cn/images/20210720083646.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![none](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/release/download_crawler_static/9947673/bg1.jpg)
![](https://csdnimg.cn/release/download_crawler_static/9947673/bg2.jpg)
![](https://csdnimg.cn/release/download_crawler_static/9947673/bg3.jpg)
![](https://csdnimg.cn/release/download_crawler_static/9947673/bg4.jpg)
![](https://csdnimg.cn/release/download_crawler_static/9947673/bg5.jpg)
剩余198页未读,继续阅读
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/398d1444fbfb419098862c302904c95b_jitaxiaozi1.jpg!1)
- 粉丝: 1
- 资源: 9
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的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)