理解与编写Makefile指南
"跟我一起写Makefile" Makefile是软件构建过程中的重要工具,它用于自动化编译、链接等任务,特别是在Unix/Linux环境下广泛使用。本文档由陈皓编写,祝冬华整理,旨在帮助程序员理解和编写Makefile。 一、Makefile的规则 规则是Makefile的核心,它们定义了如何从源文件生成目标文件。规则通常包含目标、依赖和命令三部分。例如,一个简单的规则可能是`target: dependency`, 命令。当目标文件比依赖文件旧或者依赖文件不存在时,make会执行命令来更新目标文件。 二、make的工作原理 make通过检查目标文件和依赖文件的修改时间来决定是否需要重新编译。如果目标文件较旧或者不存在,make会执行相应的命令来创建或更新目标文件。 三、变量的使用 Makefile中可以定义变量,简化重复的命令。变量有两种类型:简单变量(如`VAR= value`)和递归变量(如`VAR += value`)。变量可以包含其他变量,实现复杂的表达式。 四、自动推导 make有自动推导功能,可以根据源文件的扩展名自动推断编译和链接的命令,减少了手动指定依赖关系的繁琐工作。 五、静态模式规则 静态模式规则允许你用模式匹配多个目标,如`%.o: %.c`,表示所有`.c`文件将被转换为对应的`.o`目标。 六、伪目标 伪目标如`.PHONY`用于标记那些实际上并不存在的文件,防止make因为这些目标文件的存在而跳过实际的构建步骤。 七、书写命令 命令在Makefile中以行首的Tab字符开始,可以使用$(command)形式来执行shell命令。还可以使用`@`符号来选择是否显示命令,以及使用`|`和`&`控制命令的并发执行。 八、条件判断和函数 Makefile支持条件语句,用于根据不同的条件执行不同的规则。此外,Makefile内置了一系列函数,如字符串处理函数(如`subst`、`patsubst`)和文件名操作函数(如`dir`、`notdir`),用于在Makefile中进行更复杂的逻辑操作。 通过学习和实践这个文档,程序员能够掌握Makefile的基本构造和用法,从而提高软件构建的效率和自动化程度。对于跨平台开发和维护大型项目,理解并熟练运用Makefile至关重要。
![](https://csdnimg.cn/release/download_crawler_static/3870666/bgd.jpg)
![](https://csdnimg.cn/release/download_crawler_static/3870666/bge.jpg)
![](https://csdnimg.cn/release/download_crawler_static/3870666/bgf.jpg)
![](https://csdnimg.cn/release/download_crawler_static/3870666/bg10.jpg)
剩余77页未读,继续阅读
![doc](https://img-home.csdnimg.cn/images/20210720083327.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)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://profile-avatar.csdnimg.cn/9849c94bbd2e4c3cbcfa7ac6c8a83e5a_suchto.jpg!1)
- 粉丝: 21
- 资源: 34
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 解决本地连接丢失无法上网的问题
- BIOS报警声音解析:故障原因与解决方法
- 广义均值移动跟踪算法在视频目标跟踪中的应用研究
- C++Builder快捷键大全:高效编程的秘密武器
- 网页制作入门:常用代码详解
- TX2440A开发板网络远程监控系统移植教程:易搭建与通用解决方案
- WebLogic10虚拟内存配置详解与优化技巧
- C#网络编程深度解析:Socket基础与应用
- 掌握Struts1:Java MVC轻量级框架详解
- 20个必备CSS代码段提升Web开发效率
- CSS样式大全:字体、文本、列表样式详解
- Proteus元件库大全:从基础到高级组件
- 74HC08芯片:高速CMOS四输入与门详细资料
- C#获取当前路径的多种方法详解
- 修复MySQL乱码问题:设置字符集为GB2312
- C语言的诞生与演进:从汇编到系统编程的革命
![](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)