【Linux】makefile

概念

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

◉ make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

makefile带来的好处就是——”自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

makefile的简单编写

makefile主要由两部分组成:a.依赖关系,b.依赖方法

创建并且vim makefile

在这里插入图片描述

测试文件内容:
在这里插入图片描述

执行make命令:
在这里插入图片描述

在这里插入图片描述
得到mytest*文件,运行文件。
在这里插入图片描述
make clean文件自动删除mytest。

在这里插入图片描述

.PHONY(伪目标)

clean目的是清除某些文件,而删除操作又不会需要依赖文件,所以会创建一个伪目标,相当于依赖这个伪目标,然后执行依赖方法.

1.先在前面写一个.PHONY:clean

    2.第二行紧接着输入clean:

    3.Tab键开头,然后输入依赖方法 rm -rf mytest

在这里插入图片描述
执行 make clean就可以删除指定文件。

注意:如果我们不修改test1.cpp文件代码,持续make会发生如下情况:当前可执行程序已是最新版本
在这里插入图片描述
我们却可以一直执行make clean
在这里插入图片描述
原因就是.PHONY的作用

在makefile中如果我们想无限执行mytest,只需将.PHONY:目标文件 即可。

编译器是根据文件的最新修改时间知道我的可执行程序是最新的。

stat可以查看一个文件重要的三个时间
在这里插入图片描述

❍ Access:最近的访问时间.

❍ Modify: 最近的内容修改时间,比如你修改了文件的内容,这个时间就会改变.

❍ Change:最近的属性修改时间,比如你修改了这个文件的读写权限,这样它的属性修改时间就会被修改.

一个文件是由内容+属性组成,如果文件内容被修改,那么文件的大小也会被修改,相应的属性修改时间也会改变,并且可执行文件形成的时间一定比源文件晚(这是操作顺序的原因),所以只需要比较两者的时间,只要可执行文件的时间比源文件晚,就说明这个可执行文件一定是最新的。

那么如果只执行make,它执行的是makefile中的哪一段语句呢?

默认执行的是第一个依赖关系和依赖方法。

交换clean 与 mytest来验证
在这里插入图片描述
下面的结果就不一样了。
在这里插入图片描述

makefile中常用选项

编写makefile的内容:
在这里插入图片描述
1️⃣ makefile支持定义变量,这是一门解释性语言,无需像C语言那样 int a = 10;

2️⃣ 可以理解为取出对象; 可以理解为取出对象; 可以理解为取出对象;@ 是一个特殊变量,它代表当前规则的目标文件名;$^ 是一个特殊的宏,它代表当前规则的所有前置条件(即依赖文件列表)

3️⃣ 通过观察可知,echo是用来打印内容的,但是在这个echo中,$(src) $(bin)会被替换打印

4️⃣ 如果我们执行make/clean语句,不想打印出相关信息,可以在依赖方法前加@表明@:在命令前使用@可以阻止make打印这条命令

在这里插入图片描述
此时只会打印echo语句执行的命令了。

makefile的自动推导

在这里插入图片描述
通过代码与执行语句我们可以发现make/makefile会自动根据文件中的依赖关系,进行自动推导,帮助我们执行所有相关的依赖方法

注意:

1.语句第一条必须是最终结果,如果最终目标颠倒顺序,程序不可执行
2.除了最终结果代码之外,其余的可以随意调换位置
3.整个推导过程是递归的,与栈类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lehjy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值