**
Makefile三要素:
目标、依赖、命令
模板
目标:依赖的文件或其他目标
<tab>命令1
<tab>命令2
示例
注:
1.先研究语法,再来查看示例
2.忽略wuya即其底下所有文件
./HD/makefile的内容:
语法:
.PHONY:目标
伪目标 即并不管依赖与目标的新旧,都会执行他所包含的命令
VPATH:
通过变量“VPATH”可以指定依赖文件的搜索路径,当规则的依赖文件在当前目录不存在时,make会在此变量所指定的目录下去寻找这些依赖文件。
举个例子:
上述示例中 我如果将VPATH=$(SOUR_DIR) 去掉,调用make后,执行结果如下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/2017e09a64db447bbd08f9815fd86b95.png)
原因:因为该例程中,我们的依赖文件是 build/*.o ,所以我们在生成.o文件时,默认去当前目录下(build)寻找 ,而实际存储位置为../source。所以找不到,才会显示没有规则制定目标。
当然也可以稍微修改下规则
按下面这样将依赖文件的路径标明 就可以运行通过了
![在这里插入图片描述](https://img-blog.csdnimg.cn/01cc8cb3dc1c4f7ca4232e8ebf729d65.png)
按下面这样将依赖文件的路径标明 就可以运行通过了
自定义变量:
= //延迟赋值
:= //立即赋值
?= //空赋值 当变量未赋值时有效
+= //追加赋值
自动化变量:
$< //第一个依赖文件
$^ //全部依赖文件
$@ //目标
通配符
%: 匹配任意多个非空字符与shell中的通配符* 异曲同工
**条件分支:**
ifeq(var1,var2)
... //相等运行
else
... //不相等运行
endif
ifneq(var1,var2)
... //不相等运行
else
... //相等运行
endif
常用函数:
patsubst
作用:文本转换 将参数三中符合参数一的文本转换成参数二的样子
举例:$(patsubst %.c,%.o,a.c b.c d.c) 结果:a.o b.o c.o
notdir
作用:去除文件路径
举例:$ (notdir /linux/linux/a.c b.c) 结果 a.c b.c
wildcard
作用:查找当前文件夹下符合条件的文件
举例:$ (wilecard *.c)
foreach
作用:三个变量 将参数中的所有用空格隔开的单词赋值给参数1 并由参数3(表达式)依次执行
示例:
dirs :=a b c d
$ (foreach dir,$ (dirs),$ (wildcard $(dir))) 结果 a b c d 四个文件夹下的所有文件