深入理解Makefile:规则、变量与命令解析
需积分: 10 45 浏览量
更新于2024-07-20
收藏 621KB PDF 举报
"跟我一起学Makefile - 陈皓 & 祝冬华"
Makefile是构建自动化工具的核心,用于管理程序的编译和链接过程。本文深入剖析了Makefile的语法和用法,旨在帮助读者掌握编写Makefile的技巧。
### 第一部分:概述
在这一部分,作者介绍了Makefile的基本概念,它主要用来自动化编译和链接过程,减少重复的手动工作,提高开发效率。
### 第二部分:程序的编译和链接
这部分简述了在编程过程中,源代码如何通过编译器转化为可执行文件,以及Makefile如何组织这些过程。
### 第三部分:Makefile介绍
1. **规则**:Makefile由一系列规则组成,每个规则定义了一个或多个目标文件以及如何创建它们。
2. **示例**:展示了简单的Makefile结构,包括目标、依赖项和命令。
3. **工作原理**:解释了`make`工具如何根据规则解析和执行任务。
4. **变量**:Makefile中使用变量存储常量信息,简化规则的编写。
5. **自动推导**:`make`可以自动推断一些依赖关系,如源文件与编译后的对象文件的关系。
6. **另类风格**:讨论了不同风格的Makefile写法。
7. **清理规则**:如何设置清除目标文件的规则,以便于清理项目。
### 第四部分:Makefile总述
1. **显式规则**:明确指定了创建目标的步骤。
2. **隐晦规则**:`make`内置的规则,用于处理常见的编译情况。
3. **变量定义**:变量的声明和使用,包括显式和隐式赋值。
4. **文件指示**:如`include`指令,用于包含其他Makefile。
5. **环境变量MAKEFILES**:影响`make`的行为。
6. **工作方式**:`make`处理目标的顺序和策略。
### 第五部分:书写规则
1. **规则举例**:提供了更多规则实例。
2. **规则语法**:详细解释了规则的结构和组成部分。
3. **通配符**:`*`等通配符在规则中的应用。
4. **文件搜寻**:`make`如何查找依赖文件。
5. **伪目标**:如`.PHONY`,确保目标总是被重新构建。
6. **多目标**:一个规则可以创建多个目标。
7. **静态模式**:一种创建多目标的高效方法。
8. **自动生成依赖性**:使用工具自动确定源文件的依赖性。
### 第六部分:书写命令
1. **显示命令**:`@`符号控制命令是否在终端显示。
2. **命令执行**:如何控制命令的执行顺序和并发。
3. **命令出错**:错误处理机制,如`shell`的退出状态码。
4. **嵌套执行make**:在一个Makefile中调用另一个Makefile。
5. **命令包**:`$(...)`用于包裹命令,避免特殊字符的问题。
### 第七部分:使用变量
1. **基础用法**:变量的定义和引用。
2. **变量中的变量**:变量可以嵌套引用。
3. **高级用法**:如变量扩展的时间点选择(延迟或立即)。
4. **追加值**:如何向变量追加新值。
5. **override指示符**:覆盖外部环境变量的值。
6. **多行变量**:允许在变量中使用多行文本。
7. **环境变量**:Makefile如何使用系统环境变量。
8. **目标变量**:特定于目标的变量。
9. **模式变量**:匹配模式的变量。
### 第八部分:使用条件判断
1. **示例**:展示了条件语句的实际应用。
2. **语法**:解释了`ifeq`, `ifneq`, `ifdef`, `ifndef`等条件语句的使用。
### 第九部分:使用函数
1. **调用语法**:如何在Makefile中调用函数。
2. **字符串处理函数**:包括`subst`, `patsubst`, `strip`, `findstring`, `filter`, `filter-out`, `sort`, `word`, `wordlist`, `words`, `firstword`等,用于字符串操作。
3. **文件名操作函数**:如`dir`和`notdir`,处理路径和文件名。
通过这个详细的指南,读者可以全面理解Makefile的各个要素,并学会编写高效的Makefile来管理项目构建过程。无论是新手还是经验丰富的开发者,都能从中受益。
2021-05-07 上传
1452 浏览量
2011-10-25 上传
点击了解资源详情
2024-11-05 上传
2024-11-05 上传
2024-11-05 上传
win2domain
- 粉丝: 18
- 资源: 15
最新资源
- 探索AVL树算法:以Faculdade Senac Porto Alegre实践为例
- 小学语文教学新工具:创新黑板设计解析
- Minecraft服务器管理新插件ServerForms发布
- MATLAB基因网络模型代码实现及开源分享
- 全方位技术项目源码合集:***报名系统
- Phalcon框架实战案例分析
- MATLAB与Python结合实现短期电力负荷预测的DAT300项目解析
- 市场营销教学专用查询装置设计方案
- 随身WiFi高通210 MS8909设备的Root引导文件破解攻略
- 实现服务器端级联:modella与leveldb适配器的应用
- Oracle Linux安装必备依赖包清单与步骤
- Shyer项目:寻找喜欢的聊天伙伴
- MEAN堆栈入门项目: postings-app
- 在线WPS办公功能全接触及应用示例
- 新型带储订盒订书机设计文档
- VB多媒体教学演示系统源代码及技术项目资源大全