Linux GNU Makefile中文版手册
### Linux GNU Makefile中文版手册知识点总结 #### 1. Make 概述 - **Make 的功能**: Make 是一种自动化构建工具,它可以根据文件的修改时间自动决定哪些文件需要重新编译,并执行相应的命令来更新这些文件。这使得开发者可以专注于代码本身而不是编译过程。 - **适用范围**: 尽管示例主要围绕 C 语言程序,但实际上 Make 可以应用于任何可以通过 Shell 命令编译的语言或非编程任务。 #### 2. Makefile 文件介绍 - **规则的格式**: Makefile 中的规则定义了如何构建文件,包括目标文件、依赖项以及构建命令。 - **简单的 Makefile 示例**: ```makefile target: dependency command ``` - **Make 处理 Makefile 的过程**: - 读取 Makefile 和指定的其他文件。 - 解析 Makefile 内容,提取规则和变量。 - 根据目标文件的最后修改时间和依赖项的最后修改时间确定哪些文件需要重新构建。 - 执行相应的构建命令。 - **使用变量简化 Makefile**: - 变量用于存储文件名、目录或其他信息,简化 Makefile 的书写。 - 示例: ```makefile CC = gcc OBJ = foo.o bar.o all: $(OBJ) $(CC) $(OBJ) -o prog ``` - **让 make 推断命令**: 通过使用隐含规则,Make 可以根据文件扩展名自动推断出所需的构建命令。 - **另一种风格的 Makefile**: - 使用模式规则(pattern rule)等更复杂结构。 - **在目录中删除文件的规则**: - 可以定义一个目标来清理工作目录中的临时文件。 #### 3. 编写 Makefile 文件 - **Makefile 文件的内容**: - 规则、变量定义和其他指令。 - **Makefile 文件的命名**: - 默认情况下,Make 查找名为 `Makefile` 或 `makefile` 的文件。 - **包含其他 Makefile 文件**: - 使用 `include` 指令可以引入其他 Makefile 文件。 - **变量 MAKEFILES**: - 存储所有被 include 的 Makefile 文件列表。 - **Makefile 文件重新生成的过程**: - 当 Makefile 文件自身被修改时,Make 会重新读取并解析 Makefile。 - **重载其他 Makefile 文件**: - 使用 `include` 指令可以覆盖先前的规则或变量定义。 - **Make 读取 Makefile 文件的过程**: - Make 读取主 Makefile 文件和被 include 的文件。 #### 4. 编写规则 - **规则的语法**: - 目标、依赖项和命令。 - **在文件名中使用通配符**: - 通配符如 `*` 和 `?` 用于匹配多个文件。 - 示例: ```makefile all: $(wildcard *.c) ``` - **在目录中搜寻依赖**: - VPATH 指令定义了 Make 在哪些目录中查找依赖文件。 - 示例: ```makefile VPATH = src all: $(wildcard *.o) ``` - **假想目标**: - 用于标记文件或执行某些操作。 - **没有命令或依赖的规则**: - 通常用于清理或初始化操作。 - **使用空目录文件记录事件**: - 创建一个空文件来记录 Make 运行的某个阶段。 - **内建的特殊目标名**: - `.PHONY`: 定义假想目标。 - `.PRECIOUS`: 阻止 Make 删除文件。 - **具有多个目标的规则**: - 单个规则可以有多个目标。 - **具有多条规则的目标**: - 同一目标可以在不同的规则中出现。 - **静态格式规则**: - 使用 `%` 符号匹配多个相似的目标和依赖项。 - **双冒号规则**: - 允许同一个目标有多个规则。 - **自动生成依赖**: - 使用 `-M` 选项或其他方法来自动检测依赖关系。 #### 5. 在规则中使用命令 - **命令回显**: - 显示将要执行的命令。 - **执行命令**: - 使用 `$(SHELL)` 调用 shell 来执行命令。 - **并行执行**: - 使用 `-j` 选项来并行执行命令。 - **命令错误**: - Make 会在遇到命令错误时停止执行。 - **中断或关闭 Make**: - 使用 `Ctrl-C` 中断 Make。 - **递归调用 make**: - 使用 `make` 命令在 Makefile 中调用另一个 make 实例。 - 示例: ```makefile $(shell make -C subdir) ``` #### 6. 使用变量 - **变量引用基础**: - 变量引用使用 `$` 和 `{}`。 - **变量的两个特色**: - 替换引用。 - 嵌套变量引用。 - **变量取值**: - 获取变量的实际值。 - **设置变量**: - 在 Makefile 中定义变量。 - **为变量值追加文本**: - 使用 `+=` 追加文本到现有变量值。 - **override 指令**: - 用于在命令行上覆盖 Makefile 中的变量定义。 - **定义多行变量**: - 使用 `\` 来分隔多行。 - **环境变量**: - Make 可以访问 shell 的环境变量。 - **特定目标变量的值**: - 为特定目标定义变量值。 - **特定格式变量的值**: - 根据文件名模式定义变量值。 #### 7. Makefile 文件的条件语句 - **条件语句的例子**: - 根据条件执行不同命令。 - **条件语句的语法**: - 使用 `ifeq`, `ifdef` 等。 - **测试标志的条件语句**: - 检查变量是否定义或文件是否存在。 #### 8. 文本转换函数 - **字符串替换和分析函数**: - 如 `patsubst`, `filter`, `filter-out`。 - **文件名函数**: - `basename`, `notdir` 等用于处理文件名。 - **函数 foreach**: - 对列表中的每个元素执行操作。 - **函数 if**: - 条件判断。 - **函数 call**: - 调用其他函数。 - **函数 origin**: - 确定变量的来源。 - **函数 shell**: - 在子 shell 中执行命令。 - **控制 Make 的函数**: - 如 `error`, `warning`。 #### 9. 运行 make - **指定 Makefile 文件的参数**: - 使用 `-f` 指定 Makefile 文件。 - **指定最终目标的参数**: - 使用 `-t` 指定最终目标。 - **代替执行命令**: - 使用 `-n` 只显示命令而不执行。 - **避免重新编译文件**: - 使用 `.SECONDEXPANSION` 或其他技巧来避免不必要的重新编译。 - **变量重载**: - 使用 `override` 从命令行重载变量。 - **测试编译程序**: - 使用 `--dry-run` 测试 Makefile 是否按预期工作。 - **选项概要**: - 提供了一个 Make 的所有选项的总结。 #### 10. 使用隐含规则 - **使用隐含规则**: - Make 自动识别文件类型并应用默认规则。 - **隐含规则目录**: - Make 根据文件扩展名选择隐含规则。 - **隐含规则使用的变量**: - 如 `CFLAGS`, `LDFLAGS` 控制编译和链接选项。 - **隐含规则链**: - Make 会尝试多种隐含规则组合来找到最佳匹配。 - **格式规则**: - 定义新的隐含规则。 #### 11. 使用 make 更新档案文件 - **档案成员目标**: - 使用档案文件来存储多个对象文件。 - **档案成员目标的隐含规则**: - Make 支持对档案文件进行更新。 - **使用档案的危险**: - 如果不当使用,可能会导致意外的结果。 #### 12. GNU make 的特点 - **特性总结**: - 支持并行构建。 - 支持条件语句。 - 支持复杂的文本处理函数。 #### 13. 不兼容性和失去的特点 - **不兼容性**: - GNU make 与其他版本的 make 可能存在不兼容性。 - **失去的特点**: - 某些旧版本的功能在新版本中不再支持。 #### 14. Makefile 文件惯例 - **makefile 文件的通用惯例**: - 如何组织 Makefile 文件。 - **makefile 文件的工具**: - 使用 `autoconf` 等工具生成 Makefile。 - **指定命令的变量**: - 如 `CXX`, `AR` 等。 - **安装路径变量**: - `PREFIX`, `BINDIR` 等用于指定安装位置。 - **用户标准目标**: - 如 `install`, `clean` 等。 - **安装命令分类**: - 根据安装的不同阶段分类。 #### 15. 快速参考 - **常用命令和选项的快速指南**: - 提供了 Make 的常用命令和选项的简明列表。 #### 16. make 产生的错误 - **常见的错误消息及其含义**: - 如 `make: *** [target] Error 1` 表示目标构建失败。 #### 17. 复杂的 Makefile 文件例子 - **示例 Makefile**: - 包括多个目标、复杂的规则等。 #### 18. 目录索引 - **章节和主题的索引**: - 方便查找具体信息。 #### 19. 函数、变量以及指令索引 - **Make 的所有函数、变量和指令的完整列表**: - 便于查询具体功能。 #### 总结 Make 作为一种自动化构建工具,在软件开发过程中扮演着重要的角色。通过深入了解 Makefile 的编写方法和技巧,可以极大地提高开发效率和构建质量。本书提供了丰富的实例和详尽的解释,帮助读者掌握 Make 的核心概念和实践技能。无论是初学者还是经验丰富的开发者,都能够从中受益匪浅。
剩余69页未读,继续阅读
- 粉丝: 0
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于C++和C混合模式的操作系统开发项目.zip
- (源码)基于Arduino的全球天气监控系统.zip
- OpenCVForUnity2.6.0.unitypackage
- (源码)基于SimPy和贝叶斯优化的流程仿真系统.zip
- (源码)基于Java Web的个人信息管理系统.zip
- (源码)基于C++和OTL4的PostgreSQL数据库连接系统.zip
- (源码)基于ESP32和AWS IoT Core的室内温湿度监测系统.zip
- (源码)基于Arduino的I2C协议交通灯模拟系统.zip
- coco.names 文件
- (源码)基于Spring Boot和Vue的房屋租赁管理系统.zip