make 与 makefile介绍
make:是一个工具程序,通过读取”makefile”文件以实现自动化构建软件。
- 解析源程序之间的依赖关系
- 根据依赖关系自动维护编译工作
- 执行宿主操作系统中的各种命令
众多编译辅助工具中的王者
makefile:是一个配置文件,一个描述文件。
- 定义一系列规则来指定源文件编译的先后顺序
- 拥有特定的语法规则,支持函数定义和函数调用
- 能够直接集成操作系统中的各种命令
二者关系:makefile 中的描述用于指导 make 程序如何完成工作;make 根据 makefile 中的规则执行命令,最后完成编译输出。
简单示例
make 程序的使用示例:
1 | # 以 hello 关键字作为目标查找 mf.txt 文件,并执行 hello 处的命令。 |
小结
- make 只是一个特殊功能的应用程序
- make 用于根据指定的目标执行相应的命令
- makefile 用于定义目标和实现目标所需的命令
- makefile 有特定的语法规则,支持函数定义和调用
makefile 的结构
makefile 的意义
makefile 用于定义源文件之间的依赖关系
makefile 说明如何编译各个源文件并生成可执行文件
1 | # makefile语法 |
注意事项
target 可以包含多个目标
- 使用空格对多个目标进行分割
依赖 可以包含多个依赖
- 使用空格对多个依赖进行分割
[Tab]键:\t
- 每一个命令必须以[Tab]字符开始
- [Tab]字符告诉 make 此行是一个命令行
续航符: \
- 可以将内容分开写到下一行,提高可读性
makefile的依赖示例
1 | all: test |
依赖规则
- 当目标对应的文件不存在时,执行对应命令
- 当依赖在时间上比目标更新时,执行对应命令(要理解下)
- 当依赖关系连续发生时,对比依赖链上的每一个目标
小技巧
- makefile 中可以在命令前加上 @ 符,作用为命令无回显。
- 工程开发中可以将最终可执行文件名和all同时作为 makefile 中第一条规则的目标
1 | 案例: |
小结
makefile 用于定义源文件间的依赖关系
makefile 说明如何编译各个源文件并生成可执行文件
makefile 中的目标之间存在连续依赖关系
依赖存在并且命令执行成功是目标完成的充要条件