GNUmakefile详解:规则与中间文件管理
需积分: 33 19 浏览量
更新于2024-08-09
收藏 2.24MB PDF 举报
"GNUmake中文手册,ver-3.8,由徐海兵翻译整理,2004年9月11日发布"
在编程和构建软件项目时,`make`是一个常用的自动化工具,用于根据Makefile中的规则编译和链接程序。Makefile包含了构建过程中的指令,描述了文件之间的依赖关系以及如何更新目标文件。本文主要围绕`make`的高级特性,特别是与`gcc`和Makefile相关的知识点进行详细解释。
1. **隐含规则**:
- 隐含规则是`make`内置的一系列默认规则,用于处理常见的编译和链接任务,如将`.c`源文件编译成`.o`目标文件。在描述中提到的`.PRECIOUS`, `.SECONDARY`, `.INTERMEDIATE`等都是特殊的隐含规则目标,它们用于控制中间文件的处理方式。
2. **`.PRECIOUS`**:
这个目标使得依赖它的文件在构建过程中不会被自动删除,即使在命令执行错误的情况下。这对于保持构建过程中的中间结果很有用,特别是在调试或者需要多次尝试的时候。
3. **`.INTERMEDIATE`**:
它标记的依赖文件被视作中间文件。没有依赖文件的`.INTERMEDIATE`目标意味着所有文件都被当作中间文件。中间文件通常在命令执行成功后会被删除,但`.INTERMEDIATE`规则允许保留这些文件。
4. **`.SECONDARY`**:
类似于`.INTERMEDIATE`,但它表示的中间文件不会被自动删除,即使在命令执行错误的情况下。这可以防止因意外错误而丢失工作。
5. **`.DELETE_ON_ERROR`**:
当设置这个特殊目标时,如果命令执行失败,`make`会删除已经更新过的任何目标文件。这有助于保持构建环境的清洁,确保下一次构建时可以从头开始。
6. **`.IGNORE`**:
使用`.IGNORE`可以忽略命令执行的错误,无论是该目标的直接依赖还是无依赖的目标。这意味着即使命令失败,`make`也会继续执行后续的命令。
7. **`.LOW_RESOLUTION_TIME`**:
这个目标的依赖文件被视为具有低分辨率时间戳,通常用于处理那些时间戳不精确的系统。在比较依赖关系时,`make`会考虑这种特殊设定。
8. **Makefile的结构和规则**:
Makefile包括规则、变量定义、通配符、目录搜索等元素。规则定义了目标文件及其依赖,以及当依赖文件更新时需要执行的命令。变量(如`CC`、`CFLAGS`等)可以存储常量和可变的构建参数,以简化Makefile的编写和维护。
9. **通配符和目录搜索**:
Makefile中可以使用通配符(如`*`)来匹配一组文件,但这也可能导致一些问题,比如误匹配。`vpath`关键字可以用来指定搜索特定目录以找到依赖文件,而`VPATH`变量则可以全局设置搜索路径。
10. **静态模式规则**:
静态模式规则是一种更灵活的规则形式,它允许使用模式来定义多个规则,减少了重复的规则定义,可以与隐含规则结合使用。
通过理解并熟练运用这些`make`的高级特性,开发者能够更高效地管理和构建复杂的软件项目,确保构建过程的稳定性和可靠性。`make`的强大之处在于其灵活性和自动化能力,能够根据不同的需求定制构建流程。
2020-05-25 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
2024-12-31 上传
LCC-LCC无线充电恒流 恒压闭环移相控制仿真 Simulink仿真模型,LCC-LCC谐振补偿拓扑,闭环移相控制 1. 输入直流电压350V,负载为切电阻,分别为50-60-70Ω,最大功率3.4
2024-12-31 上传
2024-12-31 上传
Big黄勇
- 粉丝: 66
- 资源: 3905
最新资源
- 石竹山文武学校网络搭建实验
- linux扫描式教程
- AnalyzeIPv6_WinPcap.cpp
- JavaScript DOM编程艺术 英文版
- tslib-1.4交叉编译和分析
- 增益可变运放AD603的原理及应用
- 70-315面向.NET的Web应用程序设计for C#模拟题.pdf
- MATLAB图像处理
- TCP-IP详解卷1-001
- Eclipse中文教程---适合初学者
- 利用现成的资源(一个可发送短信的WebService)来开发短信发送程序.txt
- 华为编码规范---非常详细
- c++课件c++课件关于循环和函数
- 编程 - 贪心算法.pdf
- Asp.net开发必备51种代码
- ubuntu学习教程