Makefile
示例说明功能目录结构:
(1)scripts目录头文件Makefile:定义变量,供其他Makefile使用。
- :=和+=均用于变量定义,且变量都是全局变量,也就是在整个Makefile文件中都可以访问的。
- wildcard
格式:$(wildcard模式参数)
功能:列出当前目录下所有符合模式参数的文件名
返回值:当前目录下所有符合模式参数的文件名 - patsubst
格式:$(patsubset模式参数,参数1,参数2)
功能:把参数2中符合模式参数的单词(单词是指参数中被空格隔开的字符串)替换成 参数1
返回值:被替换后的参数2 - addsuffix
格式:$(addsuffix 参数1,参数2)
功能:在参数2中的每个单词加上后缀参数1
返回值:加上后缀的所有单词
本示例中Scripts目录头文件Makefile共定义了八个变量,其中包含路径、地址、目标等。
(2)总控Makefile:进入各个功能目录执行make命令,并将所有.o文件链接生成可执行文件。
- foreach
格式:$(foreach 变量参数,参数1,表达式)
功能:循环取出参数1中的单词赋给变量参数,然后运行表达式
返回值:表达式的运行结果 - call
格式:$(call 变量参数,参数…)
功能:循环把参数依次赋给变量参数中的 $(1)、 $(2)…
本例中按顺序执行,先执行mm目标后的语句进行赋值。
Make会根据以下三种情况进行处理:
1.如果当前目录下没有或缺少依赖文件,则执行其规则命令生成依赖文件。
2.如果存在依赖文件,则把其作为目标文件来检查依赖规则。
3.如果目标文件比所有依赖文件新,则不做处理。
(3)功能目录Makefile:将功能目录下的源文件编译生成目标文件.o总控Makefile。
Make工程管理器编译程序的过程如下:
(1)Make工程管理器首先会在当前目录下读取Makefile文件。
(2)查找Makefile文件中的第一个目标文件,该文件也是Make工程管理器本次编译任务的最终目标。
(3)把目标文件的依赖文件当作目标文件进行依赖规则检查。这是一个递归的检查过程。