深入理解Makefile:静态模式与自动生成依赖性
![](https://csdnimg.cn/release/wenkucmsfe/public/img/star.98a08eaa.png)
"Makefile详解完整版" Makefile是用于自动化构建、编译和测试程序的文本文件,特别是在Unix/Linux环境中广泛使用。它定义了一系列规则,告诉`make`命令如何根据源文件生成可执行文件或其他目标文件。这篇文档将详细解释Makefile中的“静态模式规则”和“自动生成依赖性”。 七、静态模式规则 静态模式规则是一种在Makefile中定义多目标文件编译规则的高效方式。它的基本语法如下: ```makefile <targets ...>: <target-pattern>: <prereq-patterns ...> <commands>; ... ``` - `targets` 是一系列的目标文件名,可以包含通配符,代表多个目标文件。 - `target-pattern` 定义了一个模式,用于匹配`targets`中符合该模式的目标文件。 - `prereq-patterns` 是依赖模式,用于确定`target-pattern`对应的目标文件依赖哪些文件。 例如,`%.o: %.c` 表示所有以`.o`结尾的目标文件依赖于相应的`.c`源文件。在Makefile中,`%`是一个通配符,代表任何字符序列。如果需要在文件名中使用真实的`%`字符,可以使用反斜杠`\`进行转义。 下面是一个示例: ```makefile objects = foo.o bar.o all: $(objects) $(objects): %.o: %.c $(CC) -c $(CFLAGS) $< -o $@ ``` 这个例子中,`$(objects)`变量包含了目标文件列表,`%.o`是目标模式,`%.c`是依赖模式。规则展开后,等同于为每个`.o`文件分别定义规则,将`.c`文件编译成对应的`.o`文件。 八、自动生成依赖性 在Makefile中,通常需要确保目标文件的编译考虑到了所有相关的头文件。例如,当源文件包含某个头文件时,头文件的改变应该触发源文件的重新编译。为了自动处理这些依赖关系,可以使用Makefile的内置函数,如`$(filter)`,来动态生成依赖关系。 ```makefile files = foo.elc bar.o lose.o $(filter %.o,$(files)): %.o: %.c $(CC) -c $(CFLAGS) $< -o $@ $(filter %.elc,$(files)): %.elc: %.el emacs -f batch-byte-compile $< ``` 在这个例子中,`$(filter %.o,$(files))`会选择`files`列表中以`.o`结尾的文件,然后为它们生成相应的依赖规则。 总结: 理解Makefile的静态模式规则和自动生成依赖性是编写高效Makefile的关键。静态模式允许我们以简洁的方式定义大量相似的规则,而自动生成依赖性则确保了编译过程的正确性和完整性。熟练掌握这些概念对于进行大型项目管理至关重要,因为它们能提高编译效率,减少手动维护的工作量。
![](https://csdnimg.cn/release/download_crawler_static/3638741/bgb.jpg)
![](https://csdnimg.cn/release/download_crawler_static/3638741/bgc.jpg)
![](https://csdnimg.cn/release/download_crawler_static/3638741/bgd.jpg)
剩余63页未读,继续阅读
![-](https://csdnimg.cn/download_wenku/file_type_column_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/212d78dab3c24521b989da7cb5cc0680_zzvnzz.jpg!1)
- 粉丝: 8
- 资源: 61
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 构建Cadence PSpice仿真模型库教程
- VMware 10.0安装指南:步骤详解与网络、文件共享解决方案
- 中国互联网20周年必读:影响行业的100本经典书籍
- SQL Server 2000 Analysis Services的经典MDX查询示例
- VC6.0 MFC操作Excel教程:亲测Win7下的应用与保存技巧
- 使用Python NetworkX处理网络图
- 科技驱动:计算机控制技术的革新与应用
- MF-1型机器人硬件与robobasic编程详解
- ADC性能指标解析:超越位数、SNR和谐波
- 通用示波器改造为逻辑分析仪:0-1字符显示与电路设计
- C++实现TCP控制台客户端
- SOA架构下ESB在卷烟厂的信息整合与决策支持
- 三维人脸识别:技术进展与应用解析
- 单张人脸图像的眼镜边框自动去除方法
- C语言绘制图形:余弦曲线与正弦函数示例
- Matlab 文件操作入门:fopen、fclose、fprintf、fscanf 等函数使用详解
![](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)