Makefile基本使用
用途
- 项目代码编译管理
- 节省编译项目时间
- 一次编写终身受益
基本规则
基本原则:
- 若想生成目标,检查规则中的依赖条件是否存在,如不存在,则寻找是否有规则用来生成依赖文件
- 检查规则中的目标是否需要更新,必须先检查它的所有依赖,依赖中有任一被更新,则目标必须更新
规则:
1 |
|
ALL变量
:用于指定makefile的最终目标
示例:
1 |
|
Makefile变量
自动变量:
$@
:表示规则中的目标$<
:表示规则中的第一个依赖条件,在模式规则中,它可以将依赖条件列表中的所有依赖依次取出,套用模式规则$^
:表示规则中的所有依赖条件,组成一个列表,以空格隔开,如果这个列表中有重复的项则消除重复项
注:自动变量是使用于规则的命令中
Makefile函数
函数:
src=$(wildcard *.cpp)
:找到当前目录下所有后缀为.cpp的文件,赋值给src,wildcard为函数名,$()是函数调用方式,*.cpp是参数obj=$(patsubst %.cpp,%.o,$(src))
:把src变量里所有后缀为.cpp的文件替换成.o,patsubst为函数名,$()是函数调用方式,%.cpp为替换前的文件后缀,%.o为替换后的文件后缀
模式规则
模式规则:
- 使用模式匹配来自动化帮我们实现手写规则
- 例如:我要将.cpp文件生成.o文件就可以写成这样:
1 |
|
静态模式规则:就是指定模式规则给谁用
例如:
1 |
|
clean
使用:
- 可以在makefile中定义clean来清理编译后不需要的文件
- 在终端使用
make clean
命令执行
规则:
1 |
|
示例:
1 |
|
注:rm前的-表示忽略出错执行,也就是当删除一个文件出错时,会忽略这个错误继续执行后面的操作
生成伪目标:
伪目标
:不管条件满足与否,目标都要被执行- 当我们有一个名字为clean文件或者ALL的文件,这样会导致make出错,因此我们需要生成伪目标
1 |
|
最终模板
模板1:用于指定文件执行,比方单个文件
1 |
|
模板2:适用于项目
1 |
|
Makefile基本使用
https://moonfordream.github.io/posts/Makefile基本使用/