Linux:Makefile和make基本介绍(07)

270 阅读3分钟

1.为什么需要Make和Makefile

当我们再编译少数源文件的时候,使用gcc/g++命令是很方便的,可当源文件的数量非常庞大时,使用大量的gcc/g++命令显然是不合时宜的。

2.什么是Makefile和make

Makefile的概念: Makefile是一个文本文件,里面包含了一系列的规则,用来告诉计算机如何编译和链接程序;主要用于自动化构建过程,它可以指定哪些文件需要编译、如何编译、以及如何链接生成可执行程序。

make的概念: make是一个命令行工具,用于读取Makefile文件并执行其中定义的命令;make工具会根据Makefile中的规则,自动判断哪些文件需要重新编译,从而只编译那些有变化的文件,节省时间和资源

3.如何使用Makefile和make工具自动化构建项目

(1)初步认识Makefile和make

假设我们的小项目的文件架构如下: image.png

Step01:编写Makefile文件: image.png 注意:make命令默认只执行第一条命令,因此建议把最终生成的执行文件命令放在第一行;需要说明的是,直到第一条命令的所有依赖全部生成,第一条命令才会被执行

Step02:执行make命令编译项目: image.png

Step03:运行可执行程序: image.png

(2)高效使用Makefile自动化构建项目

通过上面的例子,我们大致知道如何使用Makefile构建项目了,但是我们发现:如果源文件有1000个,那就意味着我们要在Makefile中书写1000个规则,这对于一个程序员来说是无法忍受的。那么接下来我们一步一步来认识Makefile是如何解决这个问题的。

A.变量

a.自定义变量

沿用上面的例子,我们使用自定义变量来修改它 image.png 这样一来,就有点使用编程语言的意思了,更利于维护和拓展~

b.预定义变量

image.png

image.png

c.自动变量

自动变量是用来替代目标文件和依赖文件的变量,自动变量只能在规则中使用

image.png

使用自动变量,进一步改造我们的Makefile文件(改造我们的学习!同志加油): image.png 到这里,我们使用了自定义变量、预定义变量和自动变量,发现极大地减少了咱们书写Makefile文件的量,并且还减少了输入错误的概率,可谓是一举两得呀~

那么接下来,咱们继续优化我们的Makefile文件...

B.模式匹配

学完变量我们发现,在Makefile文件中,还是要手动书写项目中的所有源文件,那么我们就让他更精简一点: image.png 到现在这一步,我们发现编译一个小项目所使用的Makefile规则已经非常简洁了,但仔细观察发现,还是要书写许多的.o文件,为了彻底解决手动书写文件名这一矛盾,引入函数就能cedilla解决这个大boss

C.函数

在使用make自动化构建项目时,常用的makefile函数有:wildcard和patsubst函数 wildcard函数用于获取指定目录下的批量文件;patsubst函数用于替换文件名的字符串

在makefile中,函数的格式如下:$(函数名,参数1,参数2,...)

于是,使用makefile函数之后,项目的Makefile文件如下: image.png 我们发现,以后不管多么大型的项目,都无需大新会耗费大量的时间来书写Makefile文件了!!!

好啦!由于篇幅限制,关于Makefile的基本介绍就到这里了,请同志们继续保持不骄不躁的优良作风,将学习进行到底...