### 中文make V3.8手册知识点概览 #### 一、GNU make工具概述 - **工具定位**:GNU make是一种强大的自动化构建工具,适用于多种编程语言和操作系统平台。 - **核心功能**:通过解析Makefile文件来管理软件项目的构建过程。 #### 二、GNU make工具基本使用 ##### 2.1 Makefile简介 - **定义**:Makefile是GNU make的工作脚本,用于定义项目的构建逻辑。 - **内容**:通常包括变量定义、规则定义等。 - **作用**:指导make工具如何编译源代码、链接库文件以及清理工作目录等。 ##### 2.2 Makefile规则介绍 - **构成**:目标文件、依赖文件、命令序列。 - **类型**: - **显式规则**:明确指定了目标文件与依赖文件之间的关系。 - **隐含规则**:由make自动推导出目标文件与依赖文件之间的关系。 - **模式规则**:用于处理一组相似的目标文件。 ##### 2.3 简单示例 - **示例**: ```makefile all: prog prog: main.o lib1.o lib2.o gcc -o prog main.o lib1.o lib2.o .PHONY: clean clean: rm -f *.o prog ``` ##### 2.4 make如何工作 - **流程**: 1. 读取Makefile文件。 2. 解析Makefile内容,建立构建任务依赖图。 3. 按照依赖关系顺序执行构建任务。 4. 执行完毕后输出构建结果。 ##### 2.5 指定变量 - **定义方式**: - **直接赋值**:`VAR = value` - **递归展开赋值**:`VAR := value` - **应用场景**:定义路径、文件列表等。 ##### 2.6 自动推导规则 - **原理**:make根据文件扩展名推断目标文件的构建命令。 - **常见扩展名**: - `.c` → `.o`:编译C源文件。 - `.cpp` → `.o`:编译C++源文件。 - **优点**:简化Makefile编写。 ##### 2.7 另类风格的makefile - **特点**:使用不同的约定来组织Makefile文件。 - **目的**:提高可读性和维护性。 ##### 2.8 清除工作目录过程文件 - **实现方式**:定义`clean`目标,并使用`rm`命令删除临时文件。 - **示例**:`clean: rm -f *.o prog` #### 三、Makefile总述 ##### 3.1 Makefile的内容 - **主要内容**:变量定义、规则定义、特殊命令等。 - **注意事项**:确保Makefile逻辑清晰、易于维护。 ##### 3.2 makefile文件的命名 - **默认名称**:`Makefile`或`makefile`。 - **自定义名称**:通过命令行参数指定,如`make -f mymakefile`。 ##### 3.3 包含其它makefile文件 - **方法**:使用`include`指令。 - **示例**:`include common.mk` ##### 3.4 变量MAKEFILES - **定义**:保存被包含的所有Makefile文件的列表。 - **用途**:便于追踪Makefile文件的加载情况。 ##### 3.5 变量MAKEFILE_LIST - **定义**:保存当前Makefile及其所有被包含文件的完整路径。 - **用途**:帮助诊断Makefile加载问题。 ##### 3.6 其他特殊变量 - **例子**: - `$@`:代表目标文件。 - `$<`:代表第一个依赖文件。 - `$$`:代表美元符号本身。 ##### 3.7 makefile文件的重建 - **触发条件**:当Makefile文件被修改时,可以触发makefile文件的重建。 - **实现方式**:通过定义特殊目标`.PHONY`来实现。 ##### 3.8 重载另外一个makefile - **方法**:使用`make -f`选项重新指定Makefile文件。 - **应用场景**:在不同环境下使用不同的Makefile文件。 ##### 3.9 make如何解析makefile文件 - **解析过程**: - **变量取值**:解析Makefile中的变量定义。 - **条件语句**:支持条件执行的语法结构。 - **规则定义**:解析Makefile中的规则定义。 #### 四、Makefile的规则 ##### 4.1 规则语法 - **格式**:`target: prerequisites` ` command` ##### 4.2 依赖的类型 - **主要类型**: - **文件依赖**:目标文件依赖于其他文件。 - **伪目标**:不对应任何实际文件的目标。 - **强制目标**:没有命令或依赖的目标。 ##### 4.3 文件名使用通配符 - **通配符**:`*`、`?`、`[`等。 - **示例**:`*.o`匹配所有以`.o`结尾的文件。 ##### 4.4 文件名使用通配符 - **统配符使用举例**:`*.o`表示所有以`.o`结尾的文件。 - **通配符存在的缺陷**:可能匹配到不希望的文件。 - **函数wildcard**:获取匹配到的实际文件名列表。 ##### 4.5 目录搜寻 - **一般搜索**:通过`VPATH`变量指定搜索路径。 - **选择性搜索**:使用`vpath`关键字进行特定搜索。 - **机制**:make会在指定的路径下查找依赖文件。 ##### 4.6 Makefile伪目标 - **定义**:不对应任何实际文件的目标。 - **示例**:`clean`、`all`等。 - **用途**:执行一系列命令,如清理工作目录等。 ##### 4.7 强制目标 - **定义**:没有命令或依赖的目标。 - **用途**:标记某些目标为始终过期,从而强制重新构建。 ##### 4.8 空目标文件 - **定义**:没有命令或依赖的目标,但存在命令。 - **用途**:作为其他目标的依赖,以确保某些命令被执行。 ##### 4.9 Makefile的特殊目标 - **定义**:`.PHONY`、`.PRECIOUS`等。 - **用途**:提供额外的功能,如虚拟目标、保护文件等。 ##### 4.10 多目标 - **定义**:一个规则可以有多个目标。 - **示例**:`a b: c`表示目标`a`和`b`依赖于`c`。 ##### 4.11 多规则目标 - **定义**:一个目标可以有多个规则。 - **示例**:针对同一个目标文件定义多个构建路径。 ##### 4.12 静态模式 - **定义**:一种用于处理模式匹配的规则。 - **示例**:`%.o: %.c`表示所有以`.c`结尾的文件生成以`.o`结尾的文件。 ##### 4.13 双冒号规则 - **定义**:用于覆盖已有的规则。 - **示例**:`foo.o:: foo.c`表示`foo.o`的构建规则为`foo.c`。 ##### 4.14 自动产生依赖 - **原理**:make自动推导目标文件之间的依赖关系。 - **应用场景**:适用于大型项目,减少手动配置依赖的时间。 #### 五、规则的命令 ##### 5.1 命令回显 - **定义**:显示将要执行的命令。 - **应用场景**:调试Makefile,查看命令是否正确。 ##### 5.2 命令的执行 - **执行方式**:逐条执行Makefile中定义的命令。 - **执行顺序**:按照Makefile文件中的顺序执行。 ##### 5.3 并发执行命令 - **定义**:同时执行多个命令。 - **应用场景**:加速构建过程,提高效率。 ##### 5.4 命令执行的错误 - **处理方式**:默认情况下,如果命令执行失败,make会停止执行。 - **忽略错误**:使用`|| true`使得即使命令执行失败也继续执行后续命令。 ##### 5.5 中断make的执行 - **实现方式**:在Makefile中使用`exit`命令。 - **应用场景**:当满足某些条件时提前结束make的执行。 ##### 5.6 make的递归执行 - **定义**:在Makefile中调用make执行另一个Makefile。 - **应用场景**:模块化构建过程,每个子模块有自己的Makefile。 ##### 5.7 定义命令包 - **定义**:将一系列命令封装在一起作为一个整体执行。 - **应用场景**:提高Makefile的可读性和可维护性。 ##### 5.8 空命令 - **定义**:没有实际执行内容的命令。 - **应用场景**:作为占位符,保持Makefile结构的完整性。 #### 六、Makefile中的变量 ##### 6.1 变量的引用 - **引用方式**:`$(VARIABLE)`或`$VARIABLE`。 - **注意事项**:避免重复定义相同的变量。 ##### 6.2 两种变量定义(赋值) - **直接赋值**:`VAR = value`,在解析时立即展开。 - **递归展开赋值**:`VAR := value`,在使用时才展开。 ##### 6.3 变量的高级用法 - **替换引用**:使用`$(VAR:from=to)`进行模式替换。 - **套嵌引用**:使用`$(VAR1:from=$(VAR2))`实现变量间的嵌套引用。 ##### 6.4 变量取值 - **取值方式**:通过`$(VAR)`获取变量值。 - **应用场景**:在规则或命令中使用变量。 ##### 6.5 如何设置变量 - **设置方式**:在Makefile中直接定义,或通过命令行参数传递。 ##### 6.6 追加变量值 - **实现方式**:使用`+=`运算符。 - **示例**:`PATH += /usr/local/bin`。 ##### 6.7 override指示符 - **定义**:用于在命令行参数中覆盖Makefile中的变量定义。 - **应用场景**:灵活调整构建过程中的参数。 ##### 6.8 多行定义 - **定义方式**:使用`\`符号换行。 - **示例**:`VAR = line1 \ > line2` ##### 6.9 系统环境变量 - **定义**:通过环境变量传递给Makefile。 - **应用场景**:定制化构建过程,如指定编译器路径。 ##### 6.10 目标指定变量 - **定义**:针对特定目标定义的变量。 - **应用场景**:为不同目标文件定义不同的编译选项。 ##### 6.11 模式指定变量 - **定义**:根据模式匹配结果定义变量。 - **应用场景**:根据不同类型的文件定义不同的处理逻辑。 #### 七、Makefile的条件执行 ##### 7.1 条件判断的基本语法 - **语法**:`ifeq (condition, true-statement, false-statement)` - **应用场景**:根据变量值的不同执行不同的命令序列。 ##### 7.2 标记测试的条件语句 - **定义**:使用`ifdef`、`ifndef`等关键字。 - **应用场景**:检查变量是否存在或为空。 #### 八、make的内嵌函数 ##### 8.1 函数的调用语法 - **调用方式**:`$(function arguments)`。 - **应用场景**:处理文本、列表等数据。 ##### 8.2 文本处理函数 - **函数**: - `$(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)`:获取单词列表。 - `$(words TEXT)`:计算单词数量。 - `$(firstword TEXT)`:获取第一个单词。 以上是对中文make V3.8手册的主要知识点的总结和解释,涵盖了GNU make工具的基础使用、Makefile文件的编写技巧、规则定义、命令执行等方面的内容。通过这些知识点的学习,可以帮助开发者更好地掌握make工具的使用方法,提升构建效率。
剩余198页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python爬虫入门实例教程.docx
- 基于Qt的文献管理系统.zip学习资料程序
- Arduino IDE 2 入门指南.pdf
- YOLO目标检测入门实例教程.docx
- 使用外部的抽奖游戏网站的开奖接口进行开奖,网站使用php搭建,游戏使用java运行.zip
- 使用Java Swing创建飞机大战小游戏.zip
- 升官图游戏 java.zip学习资料程序
- webmagic是一个开源的Java垂直爬虫框架,目标是简化爬虫的开发流程,让开发者专注于逻辑功能的开发 webmagic的核心非常简单,但是覆盖爬虫的整个流程,也是很好的学习爬虫开发的材料
- NFC测试不灵敏,NFC工具
- javaweb-高校学生选课系统项目源码.zip