【Liunx】什么是make和makefile?

在这里插入图片描述

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
📃个人主页 阿然成长日记 👈点击可跳转
📆 个人专栏: 🔹数据结构与算法🔹C语言进阶🔹C++
🚩 不能则学,不知则问,耻于问人,决无长进
🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍

一、为什么需要make?

我们在linux中编译一个C代码时,会经过预处理,编译,汇编,链接才会生成一个可执行文件a.out
我们知道,自己在写一个代码时需要进行多次调试,也就意味着可能会重复很多遍 预处理,编译,汇编,链接 这一流程。那么有没有一个像vs编译器中直接点击运行就可直接编译运行的东东呢。

——make

二、make/Makefile介绍

1、Makefile是干什么的?

  • Makefile是一个文件。它是一个工程文件的编译规则,它记录了原始码如何编译的详细信息、描述了整个工程的编译链接等规则。
  • Makefile 带来的好处就是自动化编译。一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

它的语法如下:

target(目标文件):文件1 文件2(依赖文件列表)		//依赖关系

<Tab>gcc -o 欲建立的执行文件 目标文件1 目标文件2		///依赖方法
	 command
	 ...
	 ...

简单来看:

  • 目标文件依赖文件
  • <Tap> 依赖方法

📆makefile规则:

  • 目标文件与依赖文件列表文件之间要使用冒号隔开目标文件依赖文件列表
  • target可以是一个目标文件、执行文件,甚至可以是一个标签【伪目标】
  • 依赖方法前面必须加Tab空格键
  • 依赖方法以gcc为例,也可以是其他的shell指令【command】

2.make又是什么?

make:是一个解释makefile中指令的命令工具

三、具体使用展示

例如,我这里创建好了一个test.c文件,首先,去我们的makefile文件中使用 vim进行写入。
下图是Makefile文件,此时我们只需要在Makefile写上这两行即可
在这里插入图片描述

保存退出后,直接make一下,可以发现,它自动在当前源文件的所在路径下搜寻Makefile,并解释里面命令。之后若是我们需要去编译任何文件,只需要在Makefile里面做一个添加即可,怎么样,是不是很方便
在这里插入图片描述

四、深层理解

就拿上面例子来说,其实test1.c并不是目标文件的直接依赖文件,其实也是经过预处理编译汇编链接等一步步形成目标文件的。

在这里插入图片描述
所以,Makefile中的内容也可写成如下:
在这里插入图片描述
可以发现,从上到下,从可执行文件一步步溯源到test.c源文件。这就是一个完整的依赖关系。但是这样写也太多了,还好我们平常使用写两行(如三、中示例)。这里写了一遍完整的,其实是为了探求make是如何自动推导Makefile文件中的依赖关系的。

执行:
在这里插入图片描述
make扫描Makefile文件时会默认执行第一组依赖关系和依赖方法

  • make指令进入Makefile中就从第一组开始查找。在第一组依赖关系和方法时发现【mytest】的依赖文件【test1.o】不存在,就将这一个(依赖方法)入栈;
  • 继续查找第二个,此时又发现【test1.o】的依赖文件【test1.s】又不存在,又入栈;
  • 继续查找第三个,又发现【test1.s】的依赖文件【test1.i】又不存在,又入栈;
  • 继续查找第四个,此时【test1.i】的依赖文件【test1.c】存在。就依次出栈。

不管Makefile文件中的顺序怎么变,make的执行逻辑不会改变。
最后获取的便是那个我们最初想要的目标文件,即使Makefile中的编译顺序发生了变化,make也会去做一个自动推导的工作

五、项目清理

平时我们在进行各种操作之后目录中都会出现很多文件,此时当我们不想要这些文件的时候,就得去一一删除,显得尤为麻烦,如果编译可以使用Makefile来自动化构建,那清理项目中的文件可不可以呢,我们来看看

  • 此时我们在Makefile中增加一个clean功能

在这里插入图片描述

执行make clean:

在这里插入图片描述
可以发现,中间文件确实不存在了。

更多make和makefile的详解看下篇!!!

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿然成长日记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值