make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作。
makefile编写规则:
1)Makefile的书写规则包含两个部分,一个是依赖关系,一个是生成目标的方法。
2)Makefile中只有一个最终目标,第一条规则中的第一个目标将被确立为最终的目标。
makefile格式如下:
-
target: dependency_files
-
< TAB >command
/* 该行必须以tab键开头*/
举一个简单的例子:
-
david :
kang
.o
yul
.o
-
gcc
kang
.o
yul
.o
-o
david
-
kang
.o :
kang
.c
kang
.h
-
gcc
-Wall
-O
-g
-c
kang
.c
-o
kang
.o
-
yul
.o :
yul
.c
yul
.h
-
gcc
-Wall
-O
-g
-c
yul
.c
-o
yul
.o
make的运行规则:
make [目标] [-f makefile文件名] [-C 目录]
1)当“[-C 目录]”存在时,makefile目录为指定目录,否则为当前目录;
2)当“ [-f makefile文件名] ”省略时,在makefile目录下找makefile,如果不存在,再继续找Makefile;
3)当“[目标]”不存在时,从makefile的文件的第一个目标开始解析,否则从指定目标开始解析;
make的垃圾文件清理clean:
每个Makefile中都应该写一个清空目标文件(.o和执行文件)或过程文件的规则,这不仅便于重编译,也很利于保持文件的清洁。
1)一般的风格都是:
-
clean:
-
rm *
.o
2)clean从来都是放在文件的最后,更为稳健的做法是:
-
.PHONY: clean
//保证clean目标每次都能被重新生成
-
clean:
-
rm *.o
.PHONY:的作用:PHONY定义伪目标的命令一定会被执行;make不会试图寻找clean的隐含规则,使make执行效率提高。
makfile环境变量注意事项:
1)make在启动时会自动读取系统当前已经定义了的环境变量,并且会创建与之具有相同名称和数值的变量
2)如果用户在makefile中定义了相同名称的变量,那么用户自定义变量将会覆盖同名的环境变量
makefile里面的变量和规则是繁多的,不可能一一记清,以下列举一些常用变量规则:
1)Makefile中几种赋值(= := ?= +=)
=
延时变量,只有被使用时才展开定义 :=
立即变量,定义时的赋值立即有效 ?=
条件变量,当变量为空时才赋值 +=
追加赋值
-
A=
0
-
B=$(A)
//B的值最终为1,延时赋值
-
C:=$(A)
//C的值最终为0,立即赋值
-
A=
1
2)makefile @echo 命令不回显
make在执行命令之前会把要执行的命令进行输出,称之为回显,如果要执行的命令以字符@开始,则不会回显。
-
1.@
echo XXX...
-
-
在执行命令时,将输出
-
-
XXX...
-
-
2.
echo XXX...
-
-
在执行命令时,将输出
-
-
echo XXX...
-
-
XXX...
3)makfile包含子.mk文件的方法
include $(IDF_PATH)/make/project_config.mk