GNU Makefile编写指南
![](https://csdnimg.cn/release/wenkucmsfe/public/img/star.98a08eaa.png)
"Makefile文件编写" Makefile是GNU Make工具使用的配置文件,用于自动化编译、链接及其他构建过程。本文详细介绍了如何编写Makefile,包括其基本规则、变量使用、命令书写、条件判断和函数应用,适合Makefile初学者。 1. Makefile的基本规则 Makefile由一系列规则组成,每条规则描述了一个或多个目标文件如何从源文件生成。规则通常包含目标、依赖项和命令三部分。目标是需要构建的文件,依赖项是生成目标所需的文件,命令是当目标文件比依赖文件旧或者依赖文件不存在时执行的操作。 2. 示例 一个简单的Makefile规则示例如下: ```makefile target: dependency1 dependency2 command1 command2 ``` 这表示当`dependency1`或`dependency2`更新后,执行`command1`和`command2`来更新`target`。 3. 变量 Makefile支持变量,可以简化规则的编写。例如,可以定义一个变量来存储编译命令: ```makefile CC = gcc all: target $(CC) -o $@ source.c ``` 在这里,`CC`变量代表编译器,`$@`代表目标文件。 4. 自动推导 make有自动推导功能,可以根据文件扩展名自动推断编译和链接命令,减少显式规则的编写。 5. 规则的其他方面 - 伪目标如`.PHONY`用于表示不依赖于任何文件的目标,确保总是执行对应的命令。 - 多目标可以在一条规则中定义,通过空格分隔。 - 静态模式规则使用`%`通配符匹配一组文件。 - 自动依赖性可以通过`-M`选项生成,确保依赖关系的正确性。 6. 命令书写 - 命令必须以制表符开头,换行符不能替代制表符。 - `@`前缀可以使命令在执行时不显示,方便调试。 - `$(shell command)`用于执行shell命令并返回结果。 7. 变量的高级用法 - 变量可以递归展开,即变量中的变量也会被替换。 - `override`指示符用于覆盖Makefile外部的同名变量。 - 多行变量可以通过`\`在行尾续行。 8. 条件判断 Makefile支持条件语句,如`ifdef`、`ifndef`、`ifeq`等,允许根据特定条件选择性地执行规则。 9. 函数 Makefile内置了一系列函数,如字符串处理、文件名操作、循环和条件判断等,增强了Makefile的表达能力。 10. make的运行 - make可以接受参数,如`-f`指定Makefile、`-t`只触制作标记等,以及各种控制选项。 - make会检查目标与依赖文件的时间戳,决定是否需要重新构建。 11. 隐含规则 - 隐含规则是预定义的构建模式,如自动编译C源文件为对象文件。 - 可以自定义隐含规则,以覆盖默认行为。 12. 更新函数库文件 - Makefile支持更新函数库文件(如.a文件),管理库成员的添加和删除。 通过以上内容,读者可以了解并开始编写基本的Makefile,实现项目的自动化构建。随着经验的增长,可以深入学习更复杂的Makefile技巧,提高项目构建的效率和可维护性。
![](https://csdnimg.cn/release/download_crawler_static/1326680/bga.jpg)
![](https://csdnimg.cn/release/download_crawler_static/1326680/bgb.jpg)
![](https://csdnimg.cn/release/download_crawler_static/1326680/bgc.jpg)
剩余55页未读,继续阅读
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/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)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://profile-avatar.csdnimg.cn/eac91a6ade9c49398c479e53c3c9e9b5_lifj07.jpg!1)
- 粉丝: 10
- 资源: 8
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 解决Eclipse配置与导入Java工程常见问题
- 真空发生器:工作原理与抽吸性能分析
- 爱立信RBS6201开站流程详解
- 电脑开机声音解析:故障诊断指南
- JAVA实现贪吃蛇游戏
- 模糊神经网络实现与自学习能力探索
- PID型模糊神经网络控制器设计与学习算法
- 模糊神经网络在自适应PID控制器中的应用
- C++实现的学生成绩管理系统设计
- 802.1D STP 实现与优化:二层交换机中的生成树协议
- 解决Windows无法完成SD卡格式化的九种方法
- 软件测试方法:Beta与Alpha测试详解
- 软件测试周期详解:从需求分析到维护测试
- CMMI模型详解:软件企业能力提升的关键
- 移动Web开发框架选择:jQueryMobile、jQTouch、SenchaTouch对比
- Java程序设计试题与复习指南
![](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)