【Linux】-自动化构建工具(make/makefile)

作者:小树苗渴望变成参天大树
作者宣言:认真写好每一篇博客
作者gitee:gitee
在这里插入图片描述
如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!

文章目录

  • 前言


前言

今天我们来讲讲再Linux中开发必备的一项技能,没有这个技能就不适合大型项目的开发,虽然后来这个功能会有专门的工具生成,但是我们要明白他的原理才行,就好比我们以后学了STL,但是也要学习底层原理,才能孰能生巧,今天讲的知识点就是自动化构建工具make/makefile,接下来我就给大家具体介绍一下吧


make: 是一条指令
makefile: 是一个项目目录下的文件

再我们的vs上我们不管是写一个文件还是多文件的项目,想要使程序跑起来,变成可执行程序,直接快捷键,或者上方按键点一下就行了,那为什么像vs这种开发软件可以直接将多个文件直接编译呢??他的底层肯定也有自动化构建的工具使他能完成这一系列的操作。
那我们的make就相当于快捷键,而makefile相当于把多个源文件打包再一个文件里面,通过make直接编译所有源文件,就不需要一个个gcc进行编译。而且清理生成的文件也可以放在makefile文件里面,实验make去执行。

给大家把模糊概念讲清楚了,接下来我就勇案例具体给大家介绍
在这里插入图片描述
我们创建一个叫make的项目目录,里面写文件,创建一个makefile,目前makefile文件里面是空内容。


接下来先来了解两个概念:依赖关系,依赖方法

有一天你给你爸打电话,说要打钱给我了,依赖关系是父子,依赖方法是打钱,缺少了这个依赖关系,就不会打钱给你了。大家先简单理解一下。

我们再上面说过,程序经过预处理,翻译,汇编,链接,生成下面几个文件,他们直接的依赖关系是什么:

hello.o , 它依赖 hello.s
hello.s , 它依赖 hello.i
hello.i , 它依赖 hello.c

想要编译这些文件或者重新清理文件,传统的方式是:
在这里插入图片描述

现在有了依赖关系和依赖方法,我们可以这样去做编译我们的程序,接下来我们再来编写makefile

在这里插入图片描述
我们退出保存,使用make试试:
在这里插入图片描述
我们对比一下makefile文件里面的内容,看着是从下往下面执行的,但实际从上往下扫描的,当依赖方法找不到对应的文件,就会往下面找,有点像栈的形式,大家试着理解一下,我们每次只需要使用一个make,就可以直接把我们想要的文件都生成了,不需要每个文件运行的时候都需要gcc一下太麻烦了。

对于清理文件:
在这里插入图片描述
在这里插入图片描述
伪目标:

.PHONY:clean//声明clean是伪目标文件

在这里插入图片描述
我们发现一次make之后,就make不行了,提示可执行程序是最新的了,我们来执行一下清理工作看看:

在这里插入图片描述
他可以执行很多次,按这个效果,我们把之前所有的都变成伪目标看看:
在这里插入图片描述
一般的我们只把清理工作弄成伪目标文件,为什么要这么做呢??
我个人理解是清理可以一直呗执行时当心清理不干净,而文件已经时最新编译状态了,就不需要再执行,大家知道伪目标文件就好的。

注意:

在这里插入图片描述
在这里插入图片描述

原因是当只输入make的时候,会优先匹配第一个目标文件进行执行,后面的执行就必须加目标文件名才可以,这一点大家要理解。


makefile怎么知道我的程序是最新状态的
再上面说到过,我们make一次之后再make就不行了,因为普通的目标文件不能总是被执行的,因为最新的可执行文件是最新的,就不能一直被执行,所以我们想要知道make是怎么知道我们的可执行文件是最新的状态,他肯定通过一定的指标去对比才会发现它是最新的

我们使用stat来查看:
在这里插入图片描述
它是通过这三个时间来对比之前的文件判断是否需要去重新执行make指令,具体就不给大家演示了,有兴趣的可以自己下来测试一下,大家知道他是这样判断的就行了。

多文件案例:
在这里插入图片描述
我们来看看自动化构建是怎么完成的:
在这里插入图片描述
相信大家应该堆自动化构建工具了解差不多了,对于我们学习来说,我今天所讲的大家掌握就足够了,以后到公司开发后,会有自动生成构建化的工具,不需要自己写了,那样就更方便了。

对比vs上的操作:
在这里插入图片描述

vs上的重新生成解决方案就相当于make
清理解决方案就相当于make clean

那我们今天的知识点就先分享到这里了,我们下篇再见
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/352802.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

BERT中的黑暗秘密

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶” 作者:Anna Rogers 编译:ronghuaiyang 导读 在finetune BERT的时候发生了什么? 这篇博客文章总结了我们EMNLP 2019年的论文“Revealing the Dark Secrets of B…

计算机竞赛游戏探险岛,冒险岛2主线任务攻略_第三章主线任务图文攻略

冒险岛2现已开启终极内测,很多玩家可能不知道主线任务怎么做,下面为大家带来冒险岛2第三章主线任务攻略(第三章:特别的任务),一起来看看吧! *冒险岛2第三章主线任务攻略 接下来要继续更新的,是冒险岛2主线任…

《黑暗之光》RPG游戏案例学习(8)——第四章 游戏任务系统

游戏任务系统 任务界面任务的接受与完成(1)点击NPC时,出现任务描述(2)接受任务后,出现任务提示(3)完成任务后,提交获取奖励 其他设计添加按钮音效鼠标指针管理系统 参考&…

黑暗逃生服务器显示无,《黑暗逃生》常见问题解决方法 游戏进不去?

本款游戏被称作一款3D版的狼人杀游戏,最近有很多玩家开始游玩这个游戏了,但是相对的游戏时常会出现些小问题,接下来小编就给大家带来这篇黑暗逃生常见问题解决方法,不要错过哦。 常见问题解决教程 1、游戏无法运行:“-…

黑暗逃生服务器显示无,《黑暗逃生》常见问题 已知问题及解决方案

今天发号哥和大家讲解《黑暗逃生》常见问题 已知问题及解决方案 黑暗逃生常见问题解决由发号哥小编给大家带来,大家在玩黑暗逃生的时候一定会遇到一些问题吗,小编给大家整合了黑暗逃生已知问题及解决方案,感兴趣的玩家一起来看看吧。 传奇最经…

RPG游戏《黑暗之光》流程介绍与代码分析之(四):任务系统的实现

第四章:任务系统 这部分主要对任务系统进行设计,游戏的关键因素之一就是任务系统与玩家的交互,但在代码实现中并不算复杂。本篇博客主要通过一下几个方面实现任务系统。 任务模型的导入与任务UI界面的创建任务的接受与完成针对不同对象的指针…

GoodTask 6.6.0 计划提醒任务管理工具

GoodTask是一款基于Apple提醒和日历、功能强大的任务/项目管理工具。它既可以用作简单的待办事项检查列表,也可以用作复杂的项目管理工具,帮助完成重大项目。GoodTask让您通过各种不同的视角来观看自己关注且需要完成的事务。有了GoodTask,您…

超黑光摄像机可以有多“黑“?

目前,市场标准黑光级IPC能在0.0005Lux(照度单位)的低照下维持彩色,但星光级或普通红外条件则必须依赖补光灯。那么有没有一款摄像机能达到超黑光的标准,能够在更暗环境下,不需要额外补光的情况下维持彩色呢? 超低照成像…

如何处理亿级图片排重(精准排重,相似排重)

图片相似度对比 1、需求 假如有一个图片池,存有1亿图片。给一张目标图片,在图片池中做匹配。 判断一张图片是否在图片池中出现过。(完全一样)判断有没有相似的出现过。比如两张图相似度90,两张图片是在描述一件事情。 …

【初识Spring框架】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 1. Spring框架是什么? 2. IOC 容器…

mDNS实现之Bonjour与Avahi(二)——win/linux/arm交叉编译

0.Part1: mDNS实现之Bonjour与Avahi(一)——win/linux/arm交叉编译_平凡之路-CSDN博客官网:Bonjour - Apple Developerhttps://developer.apple.com/bonjour/1.WindowsBonjour SDK for Windowshttps://developer.apple.com/downlo…

Android Says Bonjour

转载自: https://blog.csdn.net/innost/article/details/8629139 Android Says Bonjour 很高兴能在农历蛇年刚开始的这期《程序员》杂志上继续为读者奉上Android的故事。初来咋到,首先要向大家说声”你好“。有意思的是,Android也很通人情&a…

iOS 之 Bonjour 协议简单抓包分析

引子 因在学习iOS编程之bonjour编程的过程中,对bonjour产生了一些些的好奇,因此就查 阅了各种资料以及自己抓包分析该协议。 注:文章作为个人学习记录,不一定准确,如有错误请多多指教,共同进步!…

1.7 基于XML配置方式使用Spring MVC

一、基于XML配置与注解的方式使用Spring MVC 1、创建Maven项目 Maven项目 - SpringMvcDemo01 单击【Finish】按钮 2、添加相关依赖 在pom.xml文件里添加支持Spring MVC的相关依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmln…

硬件工程师-BOOST升压电源设计

一、Boost变换原理 开关闭合时&#xff0c;电感电压等于输入电压 开关断开时&#xff0c;电感电压输出电压-输入电压&#xff0c; 电感的感生电动势&#xff0c;N ΔΦ磁通的变化率&#xff0c;Δt时间 假设开关闭合与开关断开&#xff0c;开关断开时能量全部释放光 将第三个式…

【Python】深度理解Class类、Object类、Type元类的概念和关系

深度理解Class类、Object类、Type元类 1.Class类、Object类、Type元类的表面关系2.Class、Object、Type解释3.关系详解4.那么如何看待object、type在Python面对对象概念中的一席之地呢&#xff1f;5.那么object、type扮演了什么样的角色呢&#xff1f;他们对class又分别做了什么…

MongoDB(学习笔记1.0)

最近在学非关系型数据库MongoDB&#xff0c;猛地用起来的真的没关系型数据库方便啊。 首先还是数据库的安装&#xff1a; 安装直接去官网安装即可&#xff0c;官网地址&#xff1a;MongoDB: The Developer Data Platform | MongoDB 当前也有免安装版的&#xff0c;这里就不再…

京东数据分析软件工具(京东618销量查询)

这一期&#xff0c;我们主要分享今年618京东美妆的预售数据&#xff0c;包括面部护肤、香水彩妆、男士面部护肤品类。 -面部护肤- 今年618&#xff0c;面部护肤品类在京东累计预售量达到130万件&#xff0c;预售额达到13亿元。预售期间&#xff0c;护肤品类均价在1010元左右。期…

Android 使用第三方字体

先看下图 一.全局替换方式 1.新建assets引入资源 2. 自定义application&#xff0c;将第三方的字体&#xff0c;替换当前系统默认字体 class App : Application() {override fun onCreate() {super.onCreate()initTypeface()}private fun initTypeface() {val typefaceByson…

Android 字体大小(fontScale)不随系统设置变化

需求 App字体大小不变 如果用户将系统字体大小设置的非常大&#xff0c;可能导致APP的文字大小显示异常。 目标效果是&#xff0c;APP内字体大小不随系统设置的 字体大小 变化。 原始效果 系统的字体大小设置为 超大 时&#xff1a;&#xff08;字体大小 可变&#xff09; 目…