MAKE的概述:
Makefile文件 Makefile 一个工程中源文件不计数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,提高了编译速度。
Makefile基本格式如下:
target ... : prerequisites ...
command
...
...
其中,
· target -目标文件,可以是 Object File,也可以是可执行文件
· prerequisites -生成target 所需要的文件或者目标
· command - make需要执行的命令(任意的shell命令), Makefile中的命令必须以[tab]开头
1)显示规则::说明如何生成一个或多个目标文件(包括 生成的文件,文件的依赖文件,生成的命 令)
2)隐晦规则:: make的自动推导功能所执行的规则
3)变量定义:: Makefile中定义的变量
4)文件指示:: Makefile中引用其他Makefile;指定Makefile中有效部分;定义一个多行命令
5)注释 :: Makefile只有行注释"#",如果要使用或者输出"#"字符,需要进行转义, "\#"。
6)执行顺序:从上到下
7)执行规则:第一行的目标指令的依赖文件如果也是一个目标的话,就会跳到 相应的目标来执行。
8)Makefile的三要素是:目标文件,依赖文件,命令行
9)Makefile如果改了名字,用make -f +指定文件名。
10)Makefile的一个特点是具有自动编译,具体是指:
1、按照makefile的规则编译,
2、看时间戳,若.c文件的时间戳没有改变,则执行之后输出“MAKE最新”。
简单的Makefile程序如下:
然后按“MAKE”执行
MAkEFILE的基本指令
变量定义:= 、:=、+=(追加)、?=(避免重复定义)
变量代替文件名: $ 文件名
伪目标:.PHONY表示伪目标
文件查找:VPATH =目录:目录
嵌套执行:cd 子目录 && $(make)或$(make) -c子目录 对子目录执行make
MAKEFILE 基本函数指令:
$(patsubset 模式参数,参数1,参数2):把参数二中符合模式参数的被空格隔开的字符串替换成参数.
$(wildcard模式参数):列出当前目录下所有符合模式参数的文件名
$(addsuffix参数1,参数2):在参数2中的每个单词加上后缀参数1.
$(foreach变量参数,参数1,表达式):循环取出参数1的单词赋给变量参数然后运行表达式。
$(call 变量参数,参数):循环把参数依次赋给变量参数中的$(1)、$(2).......
Makefile 的简单模板:
1、读取scripts下的Makefile:定义了许多变量,使用时相当于C语言头文件,能提高维护性和灵活性。
1、读取总控的Makefile:进入各个功能子目录执行make命令,将所有的.o文件链接生成最终的可执行文件
2、功能子目录下的Makefile:将src下的.c文件变为.o文件
以上各图是进行加减乘除四种运算的模块。最后在整体的文件夹下输入make,即运行成功。
用tree以树状来显示目录结构,清晰明了
以后用于其他函数只需要将scripts中的Makefile中的Modules改变一下就可以了,再把每个功能目录下的函数改成具体的一个就可以了。
如果不用函数,模块在改的时候就没那么方便,分别如图: