理解与编写Linux makefile的入门教程
"简单易懂的makefile教程" Makefile是Unix和类Unix系统中用于自动化构建、编译和测试程序的文件。它定义了一系列规则,指示编译器如何处理源代码,以及何时需要重新编译某些文件。在大型项目中,Makefile的重要性不言而喻,因为它能够有效地管理编译过程,避免重复工作,并确保整个项目的构建一致性。 1. **什么是Makefile?** Makefile是一个文本文件,包含了一系列的规则,这些规则描述了如何将源代码转换为目标代码。每个规则通常由目标(通常是编译后的可执行文件或库)、依赖文件(如源代码文件)和一组指令组成。当目标文件比依赖文件旧或者依赖文件被修改时,`make`命令会根据Makefile的规则执行相应的指令。 2. **Makefile的基本结构** - 目标(Target): 需要创建或更新的文件,例如可执行文件或库文件。 - 依赖(Dependency): 目标文件依赖的其他文件,如源代码文件、头文件等。 - 指令(Commands): 在目标需要更新时执行的命令,通常包括编译、链接等操作。 3. **Makefile中的规则** 规则通常以目标文件开始,后面跟着一个冒号(:),接着是一系列空格或制表符分隔的依赖文件。然后在新的一行,以tab键开始写入执行的命令。 示例: ``` program: main.o util.o gcc -o program main.o util.o ``` 4. **变量和函数** Makefile支持变量,可以存储常用的路径、编译选项等,简化Makefile的编写。变量可以通过`=`, `:=`或`?=`来定义。Makefile还提供了内置函数,如`$(wildcard)`用于获取目录下所有匹配的文件名。 5. **隐含规则(Implicit Rules)** GNU make内建了一系列隐含规则,能够自动识别常见的编译和链接操作,如`.c`文件如何编译成`.o`文件,再链接成可执行文件。这极大地减少了手动编写规则的需要。 6. **自动变量(Automatic Variables)** 在规则的指令中,有一些特殊的自动变量,如`$@`表示目标文件,`$<`表示第一个依赖文件,`$^`表示所有依赖文件等,它们简化了Makefile的编写。 7. **Makefile的执行** 当运行`make`命令时,它会检查目标文件与依赖文件的时间戳,如果目标文件较旧或者依赖文件已更新,就会执行相应的指令。 8. **清理目标(Clean Targets)** 常见的Makefile还包括一个`clean`目标,用于清除编译过程中产生的临时文件和目标文件,例如: ``` clean: rm -f *.o program ``` 9. **多目标和多规则** Makefile可以处理多个目标和规则,通过换行或逻辑分组,管理复杂的项目构建。 10. **递归Make** Makefile还可以调用自身来处理子目录的构建,实现整个工程的层次化管理。 Makefile是项目构建的核心,通过编写清晰、高效的Makefile,开发者可以提高工作效率,减少手动编译的错误。理解和熟练使用Makefile对于任何Unix或类Unix环境下的程序员都是必备技能。
![](https://csdnimg.cn/release/download_crawler_static/10292226/bgb.jpg)
![](https://csdnimg.cn/release/download_crawler_static/10292226/bgc.jpg)
![](https://csdnimg.cn/release/download_crawler_static/10292226/bgd.jpg)
剩余64页未读,继续阅读
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/e84b3ece159d42129470e5e3e5a074a4_realdonaldtrump.jpg!1)
- 粉丝: 114
- 资源: 42
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 多模态联合稀疏表示在视频目标跟踪中的应用
- Kubernetes资源管控与Gardener开源软件实践解析
- MPI集群监控与负载平衡策略
- 自动化PHP安全漏洞检测:静态代码分析与数据流方法
- 青苔数据CEO程永:技术生态与阿里云开放创新
- 制造业转型: HyperX引领企业上云策略
- 赵维五分享:航空工业电子采购上云实战与运维策略
- 单片机控制的LED点阵显示屏设计及其实现
- 驻云科技李俊涛:AI驱动的云上服务新趋势与挑战
- 6LoWPAN物联网边界路由器:设计与实现
- 猩便利工程师仲小玉:Terraform云资源管理最佳实践与团队协作
- 类差分度改进的互信息特征选择提升文本分类性能
- VERITAS与阿里云合作的混合云转型与数据保护方案
- 云制造中的生产线仿真模型设计与虚拟化研究
- 汪洋在PostgresChina2018分享:高可用 PostgreSQL 工具与架构设计
- 2018 PostgresChina大会:阿里云时空引擎Ganos在PostgreSQL中的创新应用与多模型存储
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)