Makefile核心(第一节)

前言

曾以为学习过程是痛苦的,其实真正静下心来是美好的,虽然很枯燥,但生活就是这样,不学习还能干吗呢…… ——张顺

makefile是相当重要的,只要你要写大工程,就必须学习makefile,我在网络找了半天没有找到合适且适合学习的资料,于是乎我想写一个关于Makefile系列的文章,将自己所学,并且总结起来,发布出来,和大家一起讨论进步学习。

还有一点:
以后的章节估计多数就要开启付费了,想学习的小伙伴希望继续跟着,一起学习,如有问题欢迎留言共同讨论解决,生活不易,开启付费……

理论了解(可以不看):
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。–百度

总之Makefile就是编译的工具,和gcc一样,只不过是一堆gcc放到了一起不用你一个个敲gcc -什么 -什么那样的麻烦,于是就出现了Makefile,将所有的编译规则放到了一起,进行整体编译

于是Makefile就是许多招聘网站说必须要会的内容了,因为,在公司当中都是以整个sdk包进行二次开发,所以有自带的Makefile规则,或者需要自己写Makefile规则去配合。

我们直接进入核心知识点,进入“他”的语法格式:

Makefile核心

在这里插入图片描述

目标: make编译参数
依赖: 目标的依赖,由什么构成的目标,比如可以是目标的源代码文件等等
tab命令: 必须前面加tab符号,当我的依赖更新则会执行命令

一头雾水是吧,来请出简单的c语言

举例讲解

demo1.c的源代码
在这里插入图片描述
写好了简单的c语言后(Linux中vim),怎么运行呢?
毫无疑问,使用gcc编译,然后./a.out运行,或者加个-o起个名字运行。这里不再演示。

既然Makefile也是编译规则,如何用Makefile代替gcc编译呢,我们来接着看

新建一个Makefile文件并写入代码:
在这里插入图片描述
看样子是把gcc移到了这个文件里面,没错就是这样的。只不过多了规则——Makefile的规则,即是Makefile核心
保存代码之后,只需要敲一下make(或者make hello),一个hello的可执行文件就出来了,执行的内容就是demo1.c的内容

依次解释:
hello: 目标编译参数
demo1.c hello文件由我这个demo1.c的文件生成
gcc -o hello demo1.c 编译指令,当demo1.c的源文件有改动则会执行这个编译,保证最新的hello目标文件

当我敲下make(或者make hello)之后,他会找到我的目标(hello)执行对应的命令(gcc -o hello demo1.c)代替我的gcc编译,至于clean可以看出是删除编译后的可执行文件,来清除对应的文件。

输入make编译文件
在这里插入图片描述
成功编译,且有hello文件
在这里插入图片描述
./hello
在这里插入图片描述

正是我demo1.c写的源代码的执行结果。

但是按照上面我所讲的Make核心,是由3部分组成,make这里hello没有问题,但是按照所讲因该也会执行clean的规则下的命令删除hello,但是却可以看到hello可以执行并没有被删除,也就是make之后clean规则命令没有被执行,为什么没有呢?

当然不会有,于是乎你发现clean规则中依赖没有,导致无法执行他规则下的命令。

clean规则没有依赖,这就说明,有些规则可以不需要依赖,那么没有依赖如何判断执行rm -f hello这条命令呢?

可以这么做 make clean
在这里插入图片描述
成功执行,且没有了hello文件

带参数输入clean则会执行对应的命令,且是无条件执行,不管你有没有hello文件他都会执行对应命令

我想应该讲明白了吧。

结束

希望大家跟着我一起学习,如有问题欢迎留言共同讨论解决,生活不易,开启付费……

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Strange_Head

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

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

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

打赏作者

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

抵扣说明:

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

余额充值