Makefile编写指南:从基础到高级
5星 · 超过95%的资源 需积分: 16 195 浏览量
更新于2024-07-29
5
收藏 528KB PDF 举报
"跟我一起写Makefile"
本书详细介绍了如何编写Makefile,涵盖了Makefile的基本概念、规则、变量、命令以及高级技巧。以下是各章节的主要知识点:
### 第一章:概述
这一章给出了Makefile的基本介绍,说明了其在软件构建过程中的作用,即自动化编译和链接过程,提高开发效率。
### 第二章:关于程序的编译和链接
本章讨论了编译和链接的基本原理,解释了为何需要Makefile来管理这些过程,以及如何通过Makefile简化复杂的构建流程。
### 第三章:Makefile介绍
- **Makefile的规则**:描述了规则的结构,包括目标、依赖和命令,以及规则如何指导make进行工作。
- **一个示例**:提供了一个简单的Makefile实例,展示了如何定义规则以编译源代码。
- **make是如何工作的**:解释了make如何解析Makefile,查找依赖关系,并执行命令。
- **makefile中使用变量**:介绍如何在Makefile中定义和使用变量,以减少重复和提高可读性。
- **让make自动推导**:说明了make如何自动推导目标文件的依赖关系。
- **另类风格的makefile**:探讨了不同的编写Makefile的风格和技巧。
- **清空目标文件的规则**:讲解了如何设置清理目标,如`clean`目标,用于删除生成的中间和目标文件。
### 第四章:Makefile总述
- **Makefile里有什么?**:阐述了Makefile可以包含的目标、规则、变量、函数等元素。
- **Makefile的文件名**:讨论了默认的Makefile文件名(通常是`Makefile`或`makefile`)及其查找逻辑。
- **引用其它的Makefile**:介绍了如何在主Makefile中包含其他Makefile,实现模块化管理。
- **环境变量MAKEFILES**:说明了如何通过环境变量指定额外的Makefile。
- **make的工作方式**:讨论了make的递归执行和并行构建策略。
### 第五章:书写规则
- **规则举例**:提供了多种规则的实例,包括目标和依赖的不同组合。
- **规则的语法**:详细介绍了规则的语法结构,如冒号、制表符的使用。
- **在规则中使用通配符**:解释了如何使用`*`和`?`等通配符匹配多个文件。
- **文件搜寻**:描述了make如何寻找文件,以及`VPATH`变量的作用。
- **伪目标**:讲解了像`.PHONY`这样的伪目标,它们不对应实际文件,用于表示特定的任务。
- **多目标**:说明了如何在一个规则中处理多个目标。
- **静态模式**:介绍了静态模式规则,用于创建一组相似的规则。
- **自动生成依赖性**:讲解了如何动态生成目标文件的依赖,如通过`gcc -M`生成头文件依赖。
### 第六章:书写命令
- **显示命令**:讨论了如何控制命令是否显示在终端上。
- **命令执行**:解释了命令的执行时机和顺序。
- **命令出错**:讲述了当命令执行失败时,make的行为。
- **嵌套执行make**:介绍了在Makefile中调用其他make实例的方法。
- **定义命令包**:说明了如何使用`\(`和`\)`包裹命令,防止特殊字符被误解。
### 第七章:使用变量
- **变量的基础**:涵盖了变量的定义、赋值和使用。
- **变量中的变量**:讨论了变量展开和嵌套变量的处理。
- **变量高级用法**:包括函数式变量、变量的预定义和扩展。
- **追加变量值**:介绍了如何向已存在的变量添加值。
- **override指示符**:允许覆盖Makefile外部的环境变量。
- **多行变量**:展示了如何定义跨越多行的变量。
- **环境变量**:说明了如何在Makefile中使用环境变量。
- **目标变量**:针对特定目标的变量,如`$(obj:.o=.c)`。
- **模式变量**:类似于模式规则的变量,可以根据模式进行替换。
### 第八章至第十三章:
后续章节继续深入讲解了Makefile的高级特性,包括条件判断、函数的使用、make的运行机制、隐含规则、更新函数库文件等内容。这些章节帮助读者掌握更复杂的Makefile编写技巧,以便构建更高效、灵活的构建系统。
通过这本书的学习,读者将能够熟练地编写和理解Makefile,从而有效地管理和自动化项目的构建过程。
2012-02-01 上传
2023-09-20 上传
2018-07-14 上传
2024-11-11 上传
2024-11-11 上传
2024-11-11 上传
2024-11-11 上传
2024-11-11 上传
hijxyz
- 粉丝: 6
- 资源: 7
最新资源
- BottleJS快速入门:演示JavaScript依赖注入优势
- vConsole插件使用教程:输出与复制日志文件
- Node.js v12.7.0版本发布 - 适合高性能Web服务器与网络应用
- Android中实现图片的双指和双击缩放功能
- Anum Pinki英语至乌尔都语开源词典:23000词汇会话
- 三菱电机SLIMDIP智能功率模块在变频洗衣机的应用分析
- 用JavaScript实现的剪刀石头布游戏指南
- Node.js v12.22.1版发布 - 跨平台JavaScript环境新选择
- Infix修复发布:探索新的中缀处理方式
- 罕见疾病酶替代疗法药物非临床研究指导原则报告
- Node.js v10.20.0 版本发布,性能卓越的服务器端JavaScript
- hap-java-client:Java实现的HAP客户端库解析
- Shreyas Satish的GitHub博客自动化静态站点技术解析
- vtomole个人博客网站建设与维护经验分享
- MEAN.JS全栈解决方案:打造MongoDB、Express、AngularJS和Node.js应用
- 东南大学网络空间安全学院复试代码解析