Makefile指南:隐含规则与C/C++/Pascal/Fortran编译
需积分: 48 151 浏览量
更新于2024-08-09
收藏 478KB PDF 举报
本文主要介绍了Makefile中的隐含规则,这些规则是Make工具在没有明确指定时,自动应用的一系列预设构建步骤。隐含规则帮助简化Makefile的编写,使得编译过程更加自动化。当我们使用`make -r`或`--no-builtin-rules`选项时,可以取消所有预设的隐含规则,但一些后缀规则仍然有效,因为它们与系统定义的目标后缀列表有关。
1. **编译C程序的隐含规则**
当目标文件`.o`需要构建时,如果没有显式指定,Make会假定源文件是`.c`,并使用以下命令进行编译:
```
$(CC) –c $(CPPFLAGS) $(CFLAGS)
```
其中`$(CC)`通常是C编译器,`$(CPPFLAGS)`包含预处理选项,`$(CFLAGS)`包含编译选项。
2. **编译C++程序的隐含规则**
对于`.o`目标,如果源文件是`.cc`或`.C`(推荐使用`.cc`),Make会使用C++编译器,并执行:
```
$(CXX) –c $(CPPFLAGS) $(CFLAGS)
```
`$(CXX)`代表C++编译器。
3. **编译Pascal程序的隐含规则**
`.o`目标对应于`.p`源文件,编译命令为:
```
$(PC) –c $(PFLAGS)
```
其中`$(PC)`是Pascal编译器,`$(PFLAGS)`包含Pascal特定的编译选项。
4. **编译Fortran/Ratfor程序的隐含规则**
对于`.o`目标,Make会尝试`.r`, `.F`或`.f`源文件,使用相应的编译命令。
除了这些编译规则,Makefile还涉及其他复杂的内容,如如何编写Makefile,规则的结构,变量的使用,自动推导依赖关系,静态模式规则,命令的执行方式,以及条件判断和函数的运用。这些都极大地增强了Makefile的灵活性和实用性。
例如,Makefile可以包含多个目标和依赖关系,允许用户自定义构建过程。通过使用通配符(如`*`)可以处理一组相似的文件,而伪目标(如`.PHONY`)用于确保总是执行指定的命令,不受同名文件的影响。此外,Makefile还可以通过模式规则定义对多种文件类型执行相同操作的方式。
在命令的书写方面,可以控制命令的可见性,处理错误,以及嵌套调用`make`。变量是Makefile中重要的构造块,它们可以存储值并用于命令和规则中。Makefile支持不同类型的变量赋值,如简单的赋值、追加赋值,以及使用`override`指示符覆盖之前的定义。
Makefile的条件判断允许根据特定条件执行不同的指令,而函数则提供了字符串和文件名操作的能力,使Makefile能处理更复杂的逻辑。
总结来说,Makefile的隐含规则是构建过程中的重要组成部分,它们极大地简化了构建脚本的编写,使得自动化编译和链接更加便捷。通过对这些规则的理解和掌握,开发者可以编写出高效且易于维护的构建系统。
点击了解资源详情
点击了解资源详情
点击了解资源详情
129 浏览量
2021-10-01 上传
2021-12-01 上传
2023-09-04 上传
羊牮
- 粉丝: 41
- 资源: 3857
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器