理解GNU make的后缀规则与Makefile编写
需积分: 50 84 浏览量
更新于2024-08-10
收藏 964KB PDF 举报
本文介绍了"老式风格的"后缀规则"在Makefile中的使用方法,这是在编写构建脚本时,尤其是与早期GNU make版本兼容时的重要概念。后缀规则是一种定义目标文件如何从源文件生成的方式,逐渐被更强大的模式规则所替代。
**后缀规则类型**
1. **双后缀规则**:这种规则定义了目标文件和源文件的后缀,如`.c.o`,意味着`.c`文件经过编译生成`.o`文件。等价于`%o : %c`的模式规则。
2. **单后缀规则**:只定义源文件的后缀,如`.c`,等价于`% : %.c`。如果后缀是Makefile已经识别的,那么它将被视为单后缀规则。
**规则的使用**
- **依赖文件**:后缀规则不包含依赖文件,只有目标文件和源文件的后缀关系。如果出现依赖文件,如`.c.o: foo.h`,那它就不是一个纯粹的后缀规则,而是表示`.c.o`依赖于`foo.h`,这通常应写为`%.o: %.c foo.h`。
- **命令**:没有命令的后缀规则是没有意义的,因为它不会覆盖Makefile的内置隐含规则。
- **扩展后缀列表**:通过`.SUFFIXES`伪目标可以添加或删除Makefile认识的后缀,例如`.SUFFIXES: .hack .win`将`.hack`和`.win`加入后缀列表。
此外,文章还提到了Makefile的其他部分,包括:
- **显式规则和隐晦规则**:显式规则是用户明确指定的,隐晦规则是Makefile内置的用于推断编译和链接步骤的规则。
- **变量的使用**:Makefile中可以定义变量来简化和复用命令。
- **自动推导**:make可以自动推导源文件和目标文件之间的依赖关系。
- **静态模式规则**和**伪目标**:静态模式规则允许更灵活地定义规则,伪目标如`.PHONY`用于标记总是需要重新执行的目标。
- **命令书写**:包括显示命令、命令执行控制以及嵌套`make`调用等。
- **变量的高级特性**:如变量的叠加、覆盖、多行定义等。
- **条件判断**和**函数**:在Makefile中实现条件分支和字符串、文件名的处理功能。
这篇文章详细阐述了Makefile中的后缀规则及其在构建过程中的应用,对于理解和编写Makefile具有指导价值,特别是对于需要与旧版Makefile保持兼容的项目。
2656 浏览量
2018-08-20 上传
161 浏览量
2023-07-23 上传
2023-07-27 上传
2023-04-30 上传
2023-10-17 上传
2023-08-02 上传
2023-09-10 上传
![](https://profile-avatar.csdnimg.cn/9b6567d0a3e84fbea6edde733454bfb3_weixin_26711801.jpg!1)
物联网_赵伟杰
- 粉丝: 44
- 资源: 4045
最新资源
- 解决Eclipse配置与导入Java工程常见问题
- 真空发生器:工作原理与抽吸性能分析
- 爱立信RBS6201开站流程详解
- 电脑开机声音解析:故障诊断指南
- JAVA实现贪吃蛇游戏
- 模糊神经网络实现与自学习能力探索
- PID型模糊神经网络控制器设计与学习算法
- 模糊神经网络在自适应PID控制器中的应用
- C++实现的学生成绩管理系统设计
- 802.1D STP 实现与优化:二层交换机中的生成树协议
- 解决Windows无法完成SD卡格式化的九种方法
- 软件测试方法:Beta与Alpha测试详解
- 软件测试周期详解:从需求分析到维护测试
- CMMI模型详解:软件企业能力提升的关键
- 移动Web开发框架选择:jQueryMobile、jQTouch、SenchaTouch对比
- Java程序设计试题与复习指南