make/Makefile - ACM 时间及 make 的检查更新

news2024/9/24 19:24:01

文章目录

  • 一、ACM 时间
    • 修改时间
    • 改变时间
    • 读取时间
    • 统一更新时间
  • 二、make 会检查文件的新旧
    • 现象
    • gcc 没有检查的功能,这个工作是 make 干的
    • make/Makefile 通过对比时间了解可执行程序是不是最新的
    • 新的可执行程序和新的 .o 文件

一、ACM 时间

Linux 下文件属性中有 ACM 时间来表示文件的最近读取时间(Access),改动时间(Change),修改时间(Modify)。
使用 stat 指令可以看到某个文件的这三个时间:

在这里插入图片描述

修改时间

修改时间(Modify)指的是对文件的内容进行了修改后,紧跟着更新的时间。

在这里插入图片描述
通过 vim 打开 test.c 文件并修改后,发现 test.cModify 时间发生了改变。(其余两个时间也发生了改变,后面会说到)

改变时间

改变世界(Change)指的是对文件的属性进行了修改后,紧跟着更新的时间。

  • Change 和 Modify 时间的区别
    在这里插入图片描述
    修改文件内容,更新的是 Modify
    修改文件属性,更新的是 Change

  • 文件属性

在这里插入图片描述
上图所显示的都是文件属性(文件名也属于)。

  • 属性改变

在这里插入图片描述
上图属于直接修改文件属性后造成的 Change 时间的更新。

  • Change 和 Modify 联动

有时我们没有直接改动文件属性,但 Change 时间也发生了改变,这说明文件属性间接被改变了,比如上面介绍 Modify 时间时,通过 vim 改变文件内容后,Change 时间也发生了改变,因为修改文件后,文件的大小发生了改变,文件大小也属于文件的属性,如下图:

在这里插入图片描述

所以 ModifyChange 的时间有时候会联动,两者关系大概如下:

在这里插入图片描述

读取时间

读取时间(Access):指的是对文件查看之后,紧跟着更新的时间。

  • Access 的跟新

在这里插入图片描述
可以看到,通过 cat 指令对文件内容进行查看之后,Access 时间进行了更新。从之前的图片中,我们也能看到当使用 vim 访问文件后,Access 时间也进行了更新。

  • Access 的更新规则

Access 不是每次访问都改动的,而是有一定的时间间隔。

在这里插入图片描述
从上图看,中间查看过一次,但 Access 并没有更新。

其实这是为了效率进行的改进策略。

  1. 更新方面: Access 时间属于文件属性,而文件属性属于数据,更改它是有消耗的。
  2. 访问方面:
    如果每次访问都更新,那每次都要让操作系统向磁盘文件中,属性中的 Access 更改,压力会很大(虽然 ModifyChange 也是这样,但它俩的改动的频率要小的多)。
    如果是一个文件的高频访问可能还好,但多个文件的高频访问,会负担更大。
    而且,对于 Access 的更新必须是实时的,压力会更大。

所以,为避免低效,采取一定方法避免每次都更新。

统一更新时间

可以使用 touch 指令进行三个时间的统一更新,如下图:

在这里插入图片描述
touch 指令还有新建文件的作用:
在这里插入图片描述

touch 指令的作用总结:
在这里插入图片描述

二、make 会检查文件的新旧

现象

  1. make 形成可执行程序

在这里插入图片描述
通过make指令,我们发现它自己实现了 gcc -o test test.c 的命令操作,生成了名为 test 可执行程序。

  1. 再次make:

在这里插入图片描述

紧接着 make ,发现有提示,表明源文件已经是最新的了。
源文件没有改动,即使make ,也不会重新编译,源文件改动了,make 才会重新编译。

gcc 没有检查的功能,这个工作是 make 干的

那么,这个检查 test 文件是不是最新的工作,到底是 make 做的还是 gcc 做的呢?

在这里插入图片描述
如上图,我们可以看到多次 gcc 但并没有弹出已经到最新的消息,所以可以肯定是 make 在做检查工作。

make/Makefile 通过对比时间了解可执行程序是不是最新的

test 的修改时间只要比 test.c(源文件)的新,就表明 test 是最新的了,不用再编译覆盖当前的 test 文件了。
两者的修改时间一定是不一样的,所以可以做对比。

  • make 对比的是 Modify 时间:
    如下图,修改过源文件的权限后,源文件的 Change 的时间已经比 test 的新了,但仍然表示是最新状态了,所以对比的不是 Change 时间。

在这里插入图片描述
如下图,修改过源文件的内容后,源文件的 Modify 的时间已经比 test 的新了,此时不再显示是最新状态了,可以重新编译了,所以对比的其实是 Modify 时间。

在这里插入图片描述

新的可执行程序和新的 .o 文件

一个可执行程序需要多个源文件链接,编译链接文件后形成了可执行程序,但后面修改了几个源文件,需要再次编译链接形成一个新的可执行程序,但再次编译时,它会只编译那几个改动过的源文件,形成新的 .o 文件,再跟其他的未动的之前的 .o 文件链接,形成新的可执行程序。
某个源文件中代码有点问题,运行结果出错,改动后,重新编译后运行仍然出错,可能是因为没有很好的识别时间(文件多)/其他问题,导致仍然链接的是旧的.obj 文件,问题仍然存在。


本文到这里就结束了,如果对您有帮助,希望得到您的一个赞!🌷
如有错漏,欢迎指正!😄

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

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

相关文章

骑行耳机哪个品牌好,精选热门榜单前五名机型实测体验

骨传导耳机凭借不入耳佩戴更健康安全灯特点火遍骑行圈,然而,虽然骨传导耳机如此热门,但我们在选择的时候也要擦亮双眼,避免入手到一些劣质机型,近期也是特意为大家挑选了几款排行榜单前五名骨传导耳机推荐。 那么&…

你见过哪些独特的代码注释

你见过哪些独特的代码注释 代码注释独特的代码注释启发 作为开发者,或者说作为程序员,每天和代码打交道,那么自然也就需要代码注释。从程序员的角度来看,代码注释必不可少。好的代码注释不仅能帮助开发者更好地理解代码&#xff0…

系统架构师计算题(1)——计算机系统基础知识(上)

持续刷题,持续总结,持续更新! 目录 1. 文件系统 题型1:多级索引 2. 存储管理 题型1:页式存储 题型2:段式存储 题型3:段页式存储 3. 磁盘读取 题型1:访问耗时 4. RAID 题型1:计算容量 1. 文件系统 文件在系统中的存储结构有如下几种: (1) 连续结构。 连续结构…

计算机Java项目|基于SpringBoot的物流管理系统设计与实现

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参…

2024年骨传导耳机大比拼:看看南卡、韶音、墨觉谁的实力更胜一筹?

作为一名数码产品博主,我能明显感觉到骨传导耳机近年来的快速发展。这类耳机让用户在享受清晰音质的同时,仍能保持对周围环境的感知,非常适合户外活动。所以有很多小伙伴就想入手一款,但是又怕踩雷,没事不用怕&#xf…

武汉流星汇聚:亚马逊高效赋能中国卖家,共绘跨境电商发展新蓝图

在全球电商领域,亚马逊始终以其独特的商业模式、卓越的技术实力和对用户体验的极致追求,引领着行业的潮流与发展。展望未来,亚马逊的发展前景依旧充满无限可能与光明,其将继续在全球跨境电商市场中扮演核心角色,为中国…

AI搜索引擎Perplexica的本地部署(之二)Perplexica的非docker安装

Perplex 是一个开源的AI 驱动的搜索引擎,可以使用 Grok 和 Open AI 等模型在计算机上本地安装和运行。它为学术研究、写作、YouTube 和 Reddit 提供了一系列搜索功能。用户可以通过选择不同的模型、设置本地嵌入模型和探索各种搜索选项来定制他们的体验。该工具演示…

异构数据同步 datax (2)-postgres 写扩展

1、postgres SQL 支持 插入更新操作(与mysql 语法有一定差异) 可参考下面文章 MySQL PostgreSQL批量插入更新insertOrUpdate_mysql insert update-CSDN博客 2、datax中,可通过源码调整来实现 参考来源 https://juejin.cn/post/71248991…

如何使用GPT-SoVITSS生成各种角色的语言

百度网盘 请输入提取码 项目来自b站UP主花儿不哭 一,先除去背景声音————人生伴奏出去背景声音 1.下载后,按下面路径打开,打开文件beta,打开go-webui程序 回车,然后稍等一下,等待网页打开 2.勾选如下…

解决部分软件在 Linux 下截屏黑屏,远程控制黑屏的问题

解决部分软件在 Linux 下截屏黑屏,远程控制黑屏的问题 1.黑屏问题 某些 Linux 发行版本默认使用的是Wayland显示协议,比如 ubuntu 22.04 以上版本、fedora、manjaro 等版本。某些 Linux 软件在使用 Wayland 显示服务器协议时,截屏时屏幕是黑…

嵌入式面经篇九——网络编程

文章目录 前言一、网络编程1、列举一下 OSI 协议的各种分层。说说你最熟悉的一层协议的功能。2、TCP/IP协议包括?3、TCP通信建立和释放的过程?端口的作用?4、IP地址转换成物理地址的协议?反之?5、IP 地址的编码分为哪两…

海外媒体发稿的投稿策略:如何撰写高质量的新闻稿?

发布国外新闻稿件是一个涉及多步骤的过程,旨在确保您的新闻稿能够有效覆盖目标受众。以下是一些关键步骤和实用的技巧,帮助你实现海外媒体发稿。 1. 明确目标和受众 首先,明确您发布新闻稿的目标,是为了增加品牌曝光、推出新产品…

AIGC:text2img - 文生图

当前手头上的定制化项目,可用训练数据较少,训练的模型效果不佳。所以通过 clip-interrogator 获取图片获取描述后,批量进行 文生图 以增加样本量。 在批量生成前,先简单评测一下当前的主流 文生图 模型。直接上效果: …

SQL非技术快速入门39题

※食用指南:文章内容为牛客网《非技术快速入门》39道题重点笔记,用于重复思考错题,加深印象。 练习传送门:SQL非技术快速入门39题 目录: SQL13 Where in 和Not in SQL19 分组过滤练习题 SQL20 分组排序练习题 SQL2…

DDPM | 扩散模型代码详解【较为详细细致!!!】

文章目录 1、UNet网络结构1.1 residual网络和attention网络的细节1.2 t 的作用1.3 DDPM 中的 Positional Embedding 的使用1.4 DDPM 中的 Positional Embedding 代码1.5 residual block1.6 attention block1.7 UNet结构 2、命令行参数解析3、数据的获取与预处理4、模型的训练框…

stm32的UART重定向printf()

1配置好uart 2打开usart.c文件 3在此文件前面添加头文件 4在末尾添加重定向代码 添加的代码 /* USER CODE BEGIN 1 *///加入以下代码,支持printf函数,而不需要选择use MicroLIB //#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #if 1 //#pragma import(__use_n…

microsoft edge怎么关闭安全搜索

microsoft edge浏览器为用户提供了安全搜索功能,旨在帮助用户过滤掉搜索结果中出现的不当信息。然而,有些用户可能觉得安全搜索功能限制了他们的浏览体验或工作需求。下面就给大家带来关闭microsoft edge安全搜索的相关内容,一起来看看吧。&a…

java 函数接口Consumer简介与示例【函数式编程】【Stream】

Java 8 中的 消费者接口Consumer 是一个函数接口,它可以接受一个泛型 类型参数,它属于java.util.function包。 accept(T) 方法:是 Consumer 函数式接口的方法,传入单个输入参数,无返回值,可以用于 Lambda 表…

日本央行还会加息?机构与市场唱反调!

最近,关于日本央行是否会继续加息的话题引发了市场热议。一边是市场对加息预期大幅下降,另一边却有像先锋、M&G这样的国际知名资产管理公司坚定地看好日本央行的进一步紧缩。 这究竟是怎么回事呢? 市场与机构的观点分歧 市场看跌加息&am…

如何通过社交媒体有效促进口碑营销?

在一个广告无处不在的时代,大多数品牌不能再盲目的选择传统的广告轰炸,而应依靠口碑营销,通过消费者的自发传播实现了品牌的快速崛起。 口碑营销的几个关键的传播要素: 真实性:在广告反感的时代,消费者更倾…