GNUmake中文手册:Makefile编写指南
需积分: 36 41 浏览量
更新于2024-07-20
收藏 1.34MB PDF 举报
"这篇文档是GNUmake中文手册的版本3.81,由徐海兵在2004年9月11日翻译整理。它提供了关于如何编写和理解makefile文件的详细指南,涵盖了从基础到高级的make规则和Makefile的各个方面。"
在深入探讨之前,首先了解`make`是一个构建自动化工具,用于根据依赖关系自动执行编译、链接等任务。`makefile`是描述这些任务和依赖关系的文件。
**第二章GNUmake介绍**:
1. **Makefile简介**:一个Makefile通常包含一系列规则,定义了目标文件、它们的依赖以及如何更新这些目标。
2. **Makefile规则**:规则由目标、依赖和命令三部分组成,如`target: dependency1 dependency2 ... ; command1; command2;...`。当目标比依赖新或者依赖不存在时,`make`会运行相应的命令。
3. **简单的示例**:展示了如何创建一个简单的Makefile,比如编译C程序。
4. **make如何工作**:`make`读取Makefile,检查目标文件和依赖文件的时间戳,然后执行必要的命令。
5. **指定变量**:使用`=`, `:=`, `?=`等赋值操作符可以定义变量,用于存储常量或命令。
6. **自动推导规则**:`make`可以自动推导一些常见类型的编译和链接规则,如C/C++程序。
7. **另类风格的makefile**:介绍了不同风格的Makefile编写方式,例如使用tab键缩进。
8. **清除工作目录过程文件**:通常有`.PHONY`目标如`clean`,用于清理编译产生的临时文件。
**第三章:Makefile总述**:
1. **Makefile的内容**:可以包含目标、依赖、命令、变量定义等。
2. **命名**:Makefile文件可以命名为`makefile`, `Makefile`或`GNUmakefile`。
3. **包含其他makefile**:使用`include`指令可以引入其他Makefile,方便管理大型项目。
4. **变量MAKEFILES**:此环境变量可以指定额外的Makefile位置。
5. **变量MAKEFILE_LIST**:存储当前被加载的所有Makefile列表。
6. **特殊变量**:包括预定义的变量,如`$@`表示目标,`$<`表示第一个依赖等。
7. **重建Makefile**:有时需要在Makefile中添加规则来更新自身。
8. **重载makefile**:通过`-f`选项指定不同的Makefile。
9. **解析makefile**:解释了make如何逐行解析规则、变量和条件。
**第四章:Makefile的规则**:
1. **规则例子**:展示了规则的实际应用。
2. **规则语法**:详细讲解了规则的结构和组成部分。
3. **依赖的类型**:可以是普通文件、伪目标(如`.PHONY`)或静态模式目标。
4. **通配符**:`*`, `?`, `[...]`等通配符用于匹配一组文件名。
5. **目录搜寻**:通过`VPATH`变量或`vpath`关键字实现对目录的搜索。
6. **隐含规则**:`make`内置的一些默认编译和链接规则。
7. **特殊目标**:如`.PHONY`、`.SUFFIXES`、`.PRECIOUS`等,它们有特定的行为。
8. **多目标**:一个规则可以更新多个目标。
9. **多规则目标**:一个目标可以有多个规则,遵循优先级规则。
10. **静态模式**:允许更灵活的规则定义,避免隐含规则冲突。
这份手册详尽地阐述了`make`工具的核心概念和使用技巧,对于编写和维护Makefile文件非常有帮助,无论是新手还是经验丰富的开发者都能从中受益。通过学习,你可以有效地自动化你的构建过程,提高开发效率。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2015-08-12 上传
2007-06-04 上传
2008-11-15 上传
2024-05-24 上传
嵌入式Max
- 粉丝: 4356
- 资源: 12
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析