Makefile 自动推导依赖性
需积分: 50 84 浏览量
更新于2024-08-07
收藏 632KB PDF 举报
"《跟我一起写Makefile》(PDF重制版)由陈皓编写,主要介绍了Makefile的编写和使用方法,包括自动化依赖性生成等关键知识点。"
在编程领域,尤其是C++项目中,Makefile是一个非常重要的工具,它帮助开发者自动化编译过程,确保代码的正确构建。【标题】中的“自动生成依赖性”是Makefile的一个高级特性,尤其对于大型项目,能够有效地管理源文件与头文件之间的依赖关系。【描述】中提到的,当我们在C源文件中包含头文件(如`#include "defs.h"`)时,Makefile应该反映出这种依赖关系,以便于编译时自动检查和更新。
2.5章节中提到的“让make自动推导”,这是指Make可以自动检测源文件和目标文件之间的依赖关系,例如,通常情况下,`.c`文件会被编译成`.o`的目标文件,Make可以自动推导出这个规则。然而,对于头文件的依赖,Make不会自动识别,这就是3.8章节“自动生成依赖性”的重点。
在Makefile中,我们可以通过`gcc -M`或`gcc -MM`命令来生成依赖性信息。这些命令会分析源文件并输出一个包含所有依赖的头文件的列表。例如,如果我们有`main.c`,可以这样添加到Makefile:
```make
DEPS = defs.h
CC = gcc
CFLAGS = -MMD -MP
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
-include $(wildcard *.d)
```
在这个例子中,`-MMD`选项告诉GCC生成`.d`文件,其中包含了依赖的头文件信息,`-MP`则确保即使头文件不存在,Make也不会报错。`-include $(wildcard *.d)`会包含所有生成的`.d`文件,这样Make就会知道如何处理头文件的改变。
3.8章节还会详细讲解如何在Makefile中处理这些自动生成的依赖关系,以及如何在编译过程中有效地利用它们,确保每次修改头文件后,相关的源文件都会被重新编译。
此外,书中还涵盖了Makefile的其他重要概念,如:
- 2.1至2.12章节,解释了Makefile的基本结构、规则、变量、工作原理以及引用其他Makefile的方式。
- 3.x章节详细阐述了书写规则的各种细节,如规则的语法、通配符的使用、文件搜索、伪目标、多目标、静态模式等。
- 4.x章节讲解了如何书写命令,包括显示命令、命令执行、错误处理、嵌套make和命令包裹。
- 5.x章节深入探讨了变量的使用,包括基础、高级用法、追加值、覆盖和多行变量等。
- 6.x章节介绍了条件判断,这对于根据不同的条件执行不同的构建步骤非常有用。
- 7.x章节则介绍了各种内置函数,用于字符串和文件名操作,增强Makefile的灵活性。
《跟我一起写Makefile》是一本深入学习Makefile的优秀教程,对理解Makefile的工作原理和编写高效Makefile至关重要。通过学习书中的内容,开发者可以更好地管理和自动化他们的C++项目,提高开发效率。
172 浏览量
2018-07-01 上传
291 浏览量
2009-09-18 上传
106 浏览量
锋锋老师
- 粉丝: 26
- 资源: 3841
最新资源
- 深入浅出:自定义 Grunt 任务的实践指南
- 网络物理突变工具的多点路径规划实现与分析
- multifeed: 实现多作者间的超核心共享与同步技术
- C++商品交易系统实习项目详细要求
- macOS系统Python模块whl包安装教程
- 掌握fullstackJS:构建React框架与快速开发应用
- React-Purify: 实现React组件纯净方法的工具介绍
- deck.js:构建现代HTML演示的JavaScript库
- nunn:现代C++17实现的机器学习库开源项目
- Python安装包 Acquisition-4.12-cp35-cp35m-win_amd64.whl.zip 使用说明
- Amaranthus-tuberculatus基因组分析脚本集
- Ubuntu 12.04下Realtek RTL8821AE驱动的向后移植指南
- 掌握Jest环境下的最新jsdom功能
- CAGI Toolkit:开源Asterisk PBX的AGI应用开发
- MyDropDemo: 体验QGraphicsView的拖放功能
- 远程FPGA平台上的Quartus II17.1 LCD色块闪烁现象解析