1、2个函数
(1)src=$(wildcard ./*.c)
匹配将当前文件夹中所有.c文件。将文件名组成列表赋值给变量src。
(2)obj=$(patsubst %.c,%.o,$(src))
将参数3($(src))中,包含参数1(%.c)的部分,替换为参数2(%.o)。
假如当前文件夹下存在文件:ax.c,bx.c,cx.c
那么:src=ax.c bx.c cx.c
obj=ax.o bx.o cx.o
这两个函数的作用,在写makefile文件时,可以不用把所有依赖名都写上,而是采用参数的形式替换掉依赖文件名,可以防止依赖写错写漏掉问题,并且易于扩展更新。
注意:函数不属于命令,可以写在ALL:命令前面。
2、命令补充:clean
这个命令的作用是用于删除执行过程中生成的不必要文件,并且make的时候也不会执行,需要执行make clean命令才会执行。具体使用请先百度。
举一个rm例子:
clean: -rm -rf $(obj)
删除变量obj的所有文件,其中rm前面的-的作用是,即使发生错误,也不会报错,用作是即使obj里面有一些文件可能已经被删除了,也不会报错,进行执行rm删除命令。
一般中执行make clean前,会先执行一次make clean -n,这个命令会把你make clean会执行的命令显示出来。
3、3个自动变量
$@ :在规则的命令中表示目标
hello:hello.c gcc hello.c -o hello #通过$@变量可以写成这样 hello:hello.c gcc hello.c -o $@
注意:只能在命令阶段用该变量
$< :在规则的命令中,表示第一个依赖条件
关于$<需要补充一点:如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖依次取出,套用模式规则(模式规则下面会解释)。
$^ :在规则的命令中,表示所有依赖条件
复习命令规则语法:
目标:依赖 (一个tab)命令
4、makefile其他补充
模式规则和静态模式规则:
大致意思就是使用通配符去替换文件名,易于维护更新代码。
因为makefile属于目标驱动行编译,在编译目标代码时,缺少哪些依赖就去下面的命令寻找产生该依赖的命令。
这玩意有点不知道怎么解释,我怕解释不清楚,所以建议有需求的去百度一下。
伪目标:
.PHONY:clean ALL