当前位置: 首页 > news >正文

Linux---(六)自动化构建工具 make/Makefile

在这里插入图片描述

文章目录

  • 一、make/Makefile
  • 二、快速查看
    • (1)建立Makefile文件
    • (2)编辑Makefile文件
    • (3)解释
    • (4)效果展示
  • 三、背后的基本知识、原理
    • (1)如何清理对应的临时文件呢?包括可执行。
    • (2)单独、反复make发现的现象
    • (3)为什么我们在编译的时候,make和Makefile总是不让重新编译我们的代码?
    • (4)make和Makefile是怎么做到识别新旧文件的?
    • (5)文件的ACM时间
      • 什么是ACM时间
      • 观察ACM时间的变化
      • 直接更新Modify时间,再make,什么现象?
    • (6)结论:
    • (7)make、Makefile是具有依赖性的推导能力的
  • 四、Makefile语法补充细节
    • (1)make时不回显命令的具体执行过程:
    • (2)Makefile中依赖方法有多个时,利用回车键
    • (3)Makefile中注释用#
    • (4)Makefile是支持变量替换的
    • (5)Makefile支持依赖关系的简写
    • (6)常规用法(期待我们写出的格式)


一、make/Makefile

make是一个命令。
Makefile是一个在当前目录下存在的一个具有特定格式的文本文件。
🎗️会不会写Makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。
🎗️一个工程中的源文件数不胜数,其按照类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。
🎗️Makefile带来的好处就是自动化编译。一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
🎗️make是一个命令,是一个解释Makefile中指令的命令工具。一般来说,大多数的IDE都有这个命令,可见,Makefile都成为了一种在工程方面的编译方法。
🎗️make是一个命令,Makefile是一个文件,两个项目搭配使用,完成项目自动化构建。

二、快速查看

(1)建立Makefile文件

🎗️命令:

touch Makefile

(2)编辑Makefile文件

🎗️命令:

vim Makefile

在这里插入图片描述

(3)解释

在这里插入图片描述
在这里插入图片描述
🎗️make 会在当前的Makefile中扫描文件,找到源文件,执行目标文件形成时所对应的方法。
🎗️现实中,依赖关系+依赖方法=描述清楚一件事情的原因和做法,能达到我们的目标。

比如说,依赖关系是老爸,我是你儿子;依赖方法是给我打钱。

(4)效果展示

在这里插入图片描述

三、背后的基本知识、原理

(1)如何清理对应的临时文件呢?包括可执行。

🎗️代码

在这里插入图片描述

🎗️解读:
在这里插入图片描述

注意:
目标文件(包括伪目标)可以没有依赖关系。

🎗️清理项目的代码

make clean

在这里插入图片描述

(2)单独、反复make发现的现象

1.单独make默认从上到下扫描Makefile时,形成从上到下遇到的第一个伪目标文件。一般,清理工作写在最后。
2.不能对同一个文件重复make,因为Makefile默认在编译代码时能够自动识别出文件的新旧。
🎗️用PHONY修饰的目标文件,其实和正常的一般的文件无差别。
🎗️PHONY核心特点:总是被执行的

在一些特殊情况下,比如文件刚被编译过且没修改里面的内容,在make该文件时,第一次会被执行,后面再进行make就不执行该文件的依赖方法了。但是加上PHONY,它每make一次,就会被执行一次。

(3)为什么我们在编译的时候,make和Makefile总是不让重新编译我们的代码?

提高编译效率(如果有成千上万个文件中,里面只有几个文件被修改,那么重新编译这几个就可以了,没有更改的文件不需要编译)

(4)make和Makefile是怎么做到识别新旧文件的?

🎗️对比源文件的修改时间和可执行文件的修改时间

在这里插入图片描述

(5)文件的ACM时间

stat命令查看文件属性
用法:stat 文件名
在这里插入图片描述

什么是ACM时间

文件=内容+属性
文件的一切时间与内容、属性有关

🎗️Access时间:该文件的最近访问时间(例如:cat、vim、cd目录…)
🎗️Modify时间:对文件内容的最近修改时间
🎗️Change时间:对文件属性的最近修改时间

Change时间可能更改,就自己更改一下。
Modify时间可能更改,会和Change时间或者其他时间联动更改。

在这里插入图片描述

观察ACM时间的变化

🎗️Access的时间被更改为当前时间

在实际操作中,发现Change的时间也被更改,原因是Access时间也是文件的属性,发生变化时,Change时间也变化。

touch -a code.c

在这里插入图片描述

🎗️Modify时间被更改为当前时间

同时该操作也会伴随着Change时间变化

touch -m code.c

在这里插入图片描述

直接更新Modify时间,再make,什么现象?

直接更新Modify时间,是源文件的修改时间>可执行文件的修改时间,再make一下,就可被重新编译,形成一个新的可执行文件!

(6)结论:

🎗️1.通过时间对比,可以做到不让有些代码进行重编译
🎗️2.伪目标总是被执行的!他的依赖方法总是会被执行,不会被任何情况拦截。

(7)make、Makefile是具有依赖性的推导能力的

在这里插入图片描述

四、Makefile语法补充细节

(1)make时不回显命令的具体执行过程:

🎗️在Makefile文件中具体的操作命令前加@
在这里插入图片描述
在这里插入图片描述

(2)Makefile中依赖方法有多个时,利用回车键

(3)Makefile中注释用#

(4)Makefile是支持变量替换的

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

(5)Makefile支持依赖关系的简写

在这里插入图片描述
🎗️Makefile文件:
在这里插入图片描述

🎗️执行结果:

在这里插入图片描述

(6)常规用法(期待我们写出的格式)

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


以上内容就分享到这里啦!如果对友友们有帮助的话,记得点赞收藏博客,关注后续的内容创作哦
请添加图片描述

相关文章:

Linux---(六)自动化构建工具 make/Makefile

文章目录 一、make/Makefile二、快速查看(1)建立Makefile文件(2)编辑Makefile文件(3)解释(4)效果展示 三、背后的基本知识、原理(1)如何清理对应的临时文件呢…...

谷歌:编写干净的代码以减少认知负荷

您是否曾经阅读过代码却发现很难理解?您可能正在经历认知负荷! 认知负荷是指完成一项任务所需的脑力劳动量。阅读代码时,您必须记住变量值、条件逻辑、循环索引、数据结构状态和接口契约等信息。随着代码变得更加复杂,认知负荷也…...

微信小程序display常用属性和子元素排列方式介绍

wxss中display常用显示属性与css一致,介绍如下: 针对元素本身显示的属性: displayblock,元素显示换行displayinline,元素显示换行,但不可设置固定的宽度和高度,也不可设置上下方向的margin和p…...

设计模式—结构型模式之代理模式

设计模式—结构型模式之代理模式 代理模式(Proxy Pattern) ,给某一个对象提供一个代理,并由代理对象控制对原对象的引用,对象结构型模式。 静态代理 比如我们有一个直播平台,提供了直播功能,但是如果不进行美颜,可能就比较冷清…...

C# PDF转HTML字符串

需要nuget安装Aspose.PDF插件,本文使用23.10.0版本 一、获取PDF文件,保存到某个路径;再读取返回字符串。 //html文件保存路径 string filePath dirPath "xxx.html"; if (!File.Exists(filePath)) {//获取pdf文件流Byte[] pdfBy…...

el-table解决数据过少小于高度有留白的问题

问题:给el-table设置个高度,高度为500px,之后就添加如下4条数据,那么底部就没数据,直接就空白了,本文章就是为了解决这个问题,如果底部留白那么就添加几条空数据就行了.如果数据已达到高度了那么就不会留白了 1.效果 这个空列可以根据高度来决定添加几个空格子去铺满列表&…...

vue实现无感刷新token

vue实现无感刷新token 1、前言2、实现思路2.1 方法一2.2 方法二2.3 方法三 3、可能遇到的问题3.1 问题一:如何防止多次刷新token3.2 问题二:同时发起两个或者两个以上的请求时,其他接口怎么解决 1、前言 最近在做vue3管理系统项目的时候&…...

竞赛选题 深度学习的动物识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…...

Python高级语法----Python C扩展与性能优化

文章目录 1. 编写Python C扩展模块示例代码编译和运行运行结果2. 利用Cython优化性能示例代码编译和运行运行结果3. Python性能分析工具示例代码分析结果1. 编写Python C扩展模块 Python C扩展模块允许你将C语言代码集成到Python程序中,以提高性能。这对于计算密集型任务特别…...

行业洞察:分布式云如何助力媒体与娱乐业实现创新与增长?

过去数年,流媒体经历了蓬勃的发展过程,观众可以根据喜好收看自己所喜爱的节目内容,并希望在全球范围内访问内容。 繁荣的市场让媒体和娱乐行业的 IT 领导者们竞相发力,用更短的时间去创造互动且令人难忘的内容体验,力求…...

【多线程 - 05、后台线程】

后台线程 后台线程,它是在后台运行的,它的任务是为其他线程提供服务,这种线程被称为“后台线程(Daemon Thread)”,又称为“守护线程”或“精灵线程”。JVM的垃圾回收线程就是典型的后台线程。 后台线程的特…...

C语言之文件操作(剩余部分)

上篇博客字数到极限了,给大家把内容补充在这一篇,我们还剩下文件读取结束的判定和文件缓冲区的内容没有介绍,让我们开始下面的学习吧! 目录 1.文件读取结束的判定 1.1feof函数 1.2ferror函数 代码示例 2.文件缓冲区 2.1fflu…...

【PC】开发者日志:竞技比赛验证系统强化

各位玩家大家好!欢迎收看本期开发者日志。 在11月1日发布的第26赛季第2轮更新公告中,我们提到了有关强化比赛验证系统的内容。想必各位玩家一定会对我们加强验证系统的背景和意图感到好奇,为此我们想通过今天这篇反作弊开发者日志来向大家更详…...

c++用map,创建类似于python中的字典

1.创建 #include <map> #include <string> #include <iostream>using namespace std; int main() {/*using std::map;using std::string;using std::cout;*/map<string, string> myMap1 {{"Name", "ClearLove"},{"Gender&q…...

VuePress介绍及使用指南

VuePress是一个基于Vue.js的静态网站生成工具&#xff0c;它专注于以Markdown为中心的项目文档。VuePress具有简单易用的特性&#xff0c;同时提供了强大的自定义和扩展性。在本文中&#xff0c;我们将介绍VuePress的基本概念&#xff0c;并提供一个简单的使用指南。 什么是Vue…...

Spring-Security前后端分离权限认证

前后端分离 一般来说&#xff0c;我们用SpringSecurity默认的话是前后端整在一起的&#xff0c;比如thymeleaf或者Freemarker&#xff0c;SpringSecurity还自带login登录页,还让你配置登出页,错误页。 但是现在前后端分离才是正道&#xff0c;前后端分离的话&#xff0c;那就…...

Django中Cookie和Session的使用

目录 一、Cookie的使用 1、什么是Cookie&#xff1f; 2、Cookie的优点 3、Cookie的缺点 4、Django中Cookie的使用 二、Session的使用 1、什么是Session&#xff1f; 2、Session的优点 3、Session的缺点 4、Django中Session的使用 三、Cookie和Session的对比 总结 D…...

云原生周刊:KubeSphere 3.4.1 发布 | 2023.11.13

开源项目推荐 Inspektor Gadget Inspektor Gadget 是一组用于调试和检查 Kubernetes 资源与应用程序的工具&#xff08;或小工具&#xff09;。它在 Kubernetes 集群中管理 eBPF 程序的打包、部署和执行&#xff0c;包括许多基于 BCC 工具的程序&#xff0c;以及一些专为在 I…...

逐帧动画demo

用这一张图实现一个在跑的猎豹的动画 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X…...

Mongodb 中,与索引相关的监控指标

Mongodb为集合添加索引&#xff0c;能够提高查询的效率&#xff0c;减少查询过程中检索文档的数量&#xff0c;改变文档检索的方式。 索引&#xff0c;采用集合中的一部分数据&#xff0c;构建了B tree&#xff0c;支持mongodb的高效检索。除$indexStats命令外&#xff0c;mong…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

PydanticAI快速入门示例

参考链接&#xff1a;https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...