GNUMake使用手册:掌握Linux编程的必备
需积分: 11 176 浏览量
更新于2024-07-29
收藏 580KB DOC 举报
"这篇文档是关于GNUMake使用手册的中译版,由于凤昌翻译,目的是帮助读者理解和编写Makefile文档,特别是对于需要深入理解Linux源代码的人士。手册详细介绍了GNU Make 3.79版本的相关内容,包括Makefile文件的基本结构、规则的编写、变量的使用、文件的处理以及命令的执行等方面。"
在深入学习`makefile`和`make`工具时,首先需要理解`Makefile`的核心作用是自动化构建和管理项目中的编译过程。`Makefile`包含了目标文件、依赖文件和构建这些文件的规则。`Make`程序会根据`Makefile`中的规则来决定哪些文件需要重新编译。
1. **Makefile概述**:
- **怎样阅读本手册**:手册建议读者先了解基本的`Makefile`概念,然后逐章深入学习,同时鼓励遇到问题时积极寻找答案或反馈。
- **问题和BUG**:遇到问题时,读者可以报告或寻求解决方案。
2. **Makefile文件介绍**:
- **规则的格式**:规则通常包含目标、依赖和命令,形如`target : dependency... command...`。
- **一个简单的Makefile文件**:展示了一个基础的`Makefile`示例,包含目标和对应的命令。
- **make处理makefile文件的过程**:解释了`make`如何解析`Makefile`,检查文件更新时间,并决定执行哪些命令。
- **使用变量简化makefile文件**:变量可以让`Makefile`更简洁,如使用`CC = gcc`定义编译器。
- **让make推断命令**:`make`可以自动推断编译C或C++源文件的命令。
- **另一种风格的makefile文件**:介绍了一种不同格式的`Makefile`写法。
- **在目录中删除文件的规则**:如何创建规则来删除指定目录下的文件。
3. **编写makefile文件**:
- **makefile文件的内容**:内容包括目标、依赖、命令以及其他元数据。
- **makfile文件的命名**:`Makefile`或`makefile`通常是标准名称,但也支持自定义。
- **包含其它的makefile文件**:使用`include`指令引入其他`Makefile`,方便模块化管理。
- **变量MAKEFILES**:此变量可以指定额外的`Makefile`路径。
- **makefile文件重新生成的过程**:讨论了如何更新或自动生成`Makefile`。
- **重载其它makefile文件**:描述了如何覆盖已包含的`Makefile`规则。
- **make读取makefile文件的过程**:解释了`make`解析和执行`Makefile`的步骤。
4. **编写规则**:
- **规则的语法**:详细阐述了规则的构成,包括目标、依赖和命令的书写规范。
- **在文件名中使用通配符**:`*`和`?`等通配符用于匹配一组文件。
- **在目录中搜寻依赖**:`vpath`指令可以帮助`make`在指定目录中查找依赖文件。
- **假想目标**:用于代表不存在但需要执行的特殊目标。
- **没有命令或依赖的规则**:空规则用于设定目标的默认状态。
- **使用空目标文件记录事件**:空目标可以作为编译过程的标记。
- **内建的特殊目标名**:如`.PHONY`,`.SUFFIXES`等预定义目标有特定含义。
- **具有多个目标的规则**:一个规则可以处理多个目标。
- **具有多条规则的目标**:相同目标可以有多个构建规则。
- **静态格式规则**:用于控制静态链接模式。
- **双冒号规则**:双冒号规则提供了一种更精确控制依赖关系的方式。
- **自动生成依赖**:利用`gcc -M`等选项自动生成头文件依赖。
5. **在规则中使用命令**:
- **命令回显**:默认情况下,`make`会打印即将执行的命令。
- **执行命令**:`make`按照命令行执行编译操作。
- **并行执行**:`make`可以并行执行命令,提高构建效率。
- **命令错误**:当命令执行失败,`make`会停止并返回错误信息。
- **中断或关闭make**:用户可以通过信号如`Ctrl+C`中断`make`进程。
- **递归调用make**:`make`可以在一个`Makefile`中调用自身来处理子项目。
这个手册全面覆盖了`make`和`Makefile`的基础和高级特性,是学习和掌握自动化构建工具的重要参考资料。通过深入学习,开发者能够高效地管理和构建复杂的工程。
2012-04-29 上传
2009-10-06 上传
2009-02-25 上传
2018-06-26 上传
2021-01-09 上传
2012-07-25 上传
2021-03-28 上传
mjay1234
- 粉丝: 6
- 资源: 3
最新资源
- 新代数控API接口实现CNC数据采集技术解析
- Java版Window任务管理器的设计与实现
- 响应式网页模板及前端源码合集:HTML、CSS、JS与H5
- 可爱贪吃蛇动画特效的Canvas实现教程
- 微信小程序婚礼邀请函教程
- SOCR UCLA WebGis修改:整合世界银行数据
- BUPT计网课程设计:实现具有中继转发功能的DNS服务器
- C# Winform记事本工具开发教程与功能介绍
- 移动端自适应H5网页模板与前端源码包
- Logadm日志管理工具:创建与删除日志条目的详细指南
- 双日记微信小程序开源项目-百度地图集成
- ThreeJS天空盒素材集锦 35+ 优质效果
- 百度地图Java源码深度解析:GoogleDapper中文翻译与应用
- Linux系统调查工具:BashScripts脚本集合
- Kubernetes v1.20 完整二进制安装指南与脚本
- 百度地图开发java源码-KSYMediaPlayerKit_Android库更新与使用说明