Linux下GNU的make&makefile

make&makefile

What

一个工程的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,什么文件需要先编译,什么文件要重新编译,什么药最后编译。。。
makefile的好处就是“自动化编译&自动化解释器”,一旦写好,只需要一个make命令,整个工程完全自动化编译,极大的提高了软件开发的效率。
make:命令
makefile:文件
通过make解释makefile == 项目自动化构建。
makefile文件规则:
① 目标对象: 需要生成什么可执行程序,或者目标程序(.obj);
② 依赖对象: 生成目标对象时依赖的文件;
③ 编译命令: 如何使用依赖对象生成目标对象。
格式:
目标对象:依赖对象
== 编译命令==

How

以求斐波那契数程序为例:
在这里插入图片描述
用vim makefile编辑:
在这里插入图片描述
在这里插入图片描述
直接键入make命令,即可生成可执行程序。(当然这是最简单的makefile)
make解释makefile的原则:
一、make解释器在解释makefile的时候,会对比依赖对象(源文件)和目标对象(可执行程序)的生成时间。
如果目标对象(可执行程序)生成的时间距离现在较近,说明目标对象是最新的,不需要重新编译。
if((time - 目标对象的生成时间)<(time - 依赖对象生成时间))

若果依赖对象(源文件)生成时间距离现在较近,说明依赖对象更改过,需要重新编译。
if((time - 目标对象的生成时间)> (time - 依赖对象生成时间))
二、make只为生成第一个目标对象而服务,一旦make解释生成了第一个目标对象,则停止解释。
三、make解释器在解释makefile的时候,为了生成第一个目标对象,也会判断第一个目标对象依赖的对象是否存在,如果不存在,则在makefile后续的语句当中查找生成依赖对象的方法,先将依赖对象生成,再使用依赖对象,将第一个目标生成。
在这里插入图片描述
在这里插入图片描述
预定义变量:
$^:依赖的所有对象;
$@:目标对象。

makefile清理:
删除生成的目标对象;
在vim中编辑clean,命令——make clean。

makefile中也可以自定义变量

猜你喜欢

转载自blog.csdn.net/qq_43560037/article/details/114759409