Makefile

示例说明功能目录结构:
(1)scripts目录头文件Makefile:定义变量,供其他Makefile使用。
Makefile

  • :=和+=均用于变量定义,且变量都是全局变量,也就是在整个Makefile文件中都可以访问的。
  • wildcard
    格式:$(wildcard模式参数)
    功能:列出当前目录下所有符合模式参数的文件名
    返回值:当前目录下所有符合模式参数的文件名
  • patsubst
    格式:$(patsubset模式参数,参数1,参数2)
    功能:把参数2中符合模式参数的单词(单词是指参数中被空格隔开的字符串)替换成 参数1
    返回值:被替换后的参数2
  • addsuffix
    格式:$(addsuffix 参数1,参数2)
    功能:在参数2中的每个单词加上后缀参数1
    返回值:加上后缀的所有单词

本示例中Scripts目录头文件Makefile共定义了八个变量,其中包含路径、地址、目标等。

(2)总控Makefile:进入各个功能目录执行make命令,并将所有.o文件链接生成可执行文件。
Makefile

  • foreach
    格式:$(foreach 变量参数,参数1,表达式)
    功能:循环取出参数1中的单词赋给变量参数,然后运行表达式
    返回值:表达式的运行结果
  • call
    格式:$(call 变量参数,参数…)
    功能:循环把参数依次赋给变量参数中的 $(1)、 $(2)…

本例中按顺序执行,先执行mm目标后的语句进行赋值。
Make会根据以下三种情况进行处理:
1.如果当前目录下没有或缺少依赖文件,则执行其规则命令生成依赖文件。
2.如果存在依赖文件,则把其作为目标文件来检查依赖规则。
3.如果目标文件比所有依赖文件新,则不做处理。

(3)功能目录Makefile:将功能目录下的源文件编译生成目标文件.o总控Makefile。
MakefileMakefile
Make工程管理器编译程序的过程如下:
(1)Make工程管理器首先会在当前目录下读取Makefile文件。
(2)查找Makefile文件中的第一个目标文件,该文件也是Make工程管理器本次编译任务的最终目标。
(3)把目标文件的依赖文件当作目标文件进行依赖规则检查。这是一个递归的检查过程。