1.为什么需要Make和Makefile
当我们再编译少数源文件的时候,使用gcc/g++命令是很方便的,可当源文件的数量非常庞大时,使用大量的gcc/g++命令显然是不合时宜的。
2.什么是Makefile和make
Makefile的概念: Makefile是一个文本文件,里面包含了一系列的规则,用来告诉计算机如何编译和链接程序;主要用于自动化构建过程,它可以指定哪些文件需要编译、如何编译、以及如何链接生成可执行程序。
make的概念: make是一个命令行工具,用于读取Makefile文件并执行其中定义的命令;make工具会根据Makefile中的规则,自动判断哪些文件需要重新编译,从而只编译那些有变化的文件,节省时间和资源
3.如何使用Makefile和make工具自动化构建项目
(1)初步认识Makefile和make
假设我们的小项目的文件架构如下:
Step01:编写Makefile文件:
注意:make命令默认只执行第一条命令,因此建议把最终生成的执行文件命令放在第一行;需要说明的是,直到第一条命令的所有依赖全部生成,第一条命令才会被执行
Step02:执行make命令编译项目:
Step03:运行可执行程序:
(2)高效使用Makefile自动化构建项目
通过上面的例子,我们大致知道如何使用Makefile构建项目了,但是我们发现:如果源文件有1000个,那就意味着我们要在Makefile中书写1000个规则,这对于一个程序员来说是无法忍受的。那么接下来我们一步一步来认识Makefile是如何解决这个问题的。
A.变量
a.自定义变量
沿用上面的例子,我们使用自定义变量来修改它
这样一来,就有点使用编程语言的意思了,更利于维护和拓展~
b.预定义变量
c.自动变量
自动变量是用来替代目标文件和依赖文件的变量,自动变量只能在规则中使用
使用自动变量,进一步改造我们的Makefile文件(改造我们的学习!同志加油):
到这里,我们使用了自定义变量、预定义变量和自动变量,发现极大地减少了咱们书写Makefile文件的量,并且还减少了输入错误的概率,可谓是一举两得呀~
那么接下来,咱们继续优化我们的Makefile文件...
B.模式匹配
学完变量我们发现,在Makefile文件中,还是要手动书写项目中的所有源文件,那么我们就让他更精简一点:
到现在这一步,我们发现编译一个小项目所使用的Makefile规则已经非常简洁了,但仔细观察发现,还是要书写许多的.o文件,为了彻底解决手动书写文件名这一矛盾,引入函数就能cedilla解决这个大boss
C.函数
在使用make自动化构建项目时,常用的makefile函数有:wildcard和patsubst函数 wildcard函数用于获取指定目录下的批量文件;patsubst函数用于替换文件名的字符串
在makefile中,函数的格式如下:$(函数名,参数1,参数2,...)
于是,使用makefile函数之后,项目的Makefile文件如下:
我们发现,以后不管多么大型的项目,都无需大新会耗费大量的时间来书写Makefile文件了!!!
好啦!由于篇幅限制,关于Makefile的基本介绍就到这里了,请同志们继续保持不骄不躁的优良作风,将学习进行到底...