理解与编写Makefile:从基础到高级
需积分: 10 191 浏览量
更新于2024-07-19
收藏 505KB PDF 举报
"跟我一起写Makefile"
这篇文档是关于如何编写Makefile的教程,由陈皓撰写,并在GitHub上由SeisMan进行了PDF重制。Makefile是用于自动化编译和构建项目的文本文件,它定义了项目中不同文件之间的依赖关系以及如何更新这些文件。在软件开发中,Makefile能够简化编译过程,提高效率。
1. **概述**
- 程序的编译和链接:Makefile通常用来管理编译过程,包括预处理、编译、链接等步骤,确保只重新编译修改过的源文件,而链接所有目标文件以生成最终可执行文件。
2. **makefile介绍**
- 规则:Makefile的核心是规则,定义了目标文件及其依赖关系和更新目标的命令。
- 变量:Makefile使用变量来存储重复出现的字符串,如编译选项或路径,减少代码重复。
- 自动推导:make可以自动推导某些类型的依赖关系,例如从.c文件生成.o文件的过程。
3. **书写规则**
- 规则举例和语法:规则由目标、依赖项和命令组成,例如`target: dependency... command...`。
- 通配符:`*`用于匹配任何字符序列,`?`匹配单个任意字符。
- 文件搜寻:make会查找所有依赖文件。
- 伪目标(如`.PHONY`):表示并非实际文件的目标,避免与同名实际文件冲突。
- 静态模式规则:用于创建一组相关目标。
- 自动生成依赖性:通过`-M`或`-MM`选项让编译器生成依赖性信息。
4. **书写命令**
- 显示命令:通过`@`符号来控制是否在执行时打印命令。
- 命令执行:每个命令在单独的shell中执行。
- 嵌套make:在一个make进程中调用另一个make来处理子目录或其他独立的构建任务。
- 命令包:使用`\`在行尾来连接多行命令,或者使用`;`分隔命令。
5. **使用变量**
- 变量基础:定义和使用变量,如`VAR = value`。
- 变量中的变量:可以通过`$(VAR)`来引用变量。
- 追加变量值:使用`+=`操作符向变量添加新值。
- `override`指示符:覆盖Makefile外部的变量设置。
- 多行变量和环境变量:允许变量跨行,以及使用环境变量。
6. **使用条件判断**
- 示例:根据特定条件执行不同的构建逻辑。
- 语法:基于目标、变量值进行条件分支。
7. **使用函数**
- 函数调用语法:`$(function arg...)`。
- 字符串处理函数:如`subst`替换子字符串,`patsubst`匹配并替换模式,`strip`删除空白,`findstring`查找子字符串等。
- 文件名操作函数:如`dir`获取路径,`notdir`获取文件名,`suffix`提取后缀等。
这个教程涵盖了Makefile的基本概念到高级技巧,适合想要学习或优化构建流程的开发者参考。通过学习和实践,开发者能够编写出更高效、可维护的Makefile,提高项目构建效率。
133 浏览量
806 浏览量
162 浏览量
2025-01-08 上传
2025-01-08 上传
2025-01-08 上传
2025-01-08 上传
Homekit2015
- 粉丝: 64
- 资源: 32
最新资源
- 设置Windows 10 1903/1909/2004的脚本-.NET开发
- 一个TCP和UPD聊天、传收文件程序
- Homework-QUestion
- MTK10.0竖屏壁纸居中补丁.zip
- xiubox
- 键盘测试工具,机械键盘换轴后检测用
- echidna:W3C的新发布工作流程-主要组件
- Vue Devtools
- SoapUI(附安装步骤).rar
- pid控制器代码matlab-CDC18a:A.Selivanov和E.Fridman,“PID控制器的鲁棒采样数据实现”,在第57届IEEE
- animeWiki
- mcjoin:简单的多播测试应用程序
- abc:aa
- Asc2Silo file converter-开源
- 行业文档-设计装置-一种拱桥施工平台结构.zip
- BE2Works_v4.52_Bohol_fu11.7z