【Linux】 深入讲解自动化构建工具

各位大佬好 ,这里是阿川的博客,祝您变得更强

在这里插入图片描述 个人主页:在线OJ的阿川

大佬的支持和鼓励,将是我成长路上最大的动力在这里插入图片描述

阿川水平有限,如有错误,欢迎大佬指正在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Linux一系列的文章(质量分均在93分 以上
Linux–发展、环境、指令上半场
Linux–指令下半场
Linux–权限
Linux–生态与工具
Linux–开发工具

众所周知

自动化构建工具是指

  • make 指令
    • 能够自动化 编译和自动化清除文件

请添加图片描述

  • makefile 文件
    • 文件中存在依赖关系依赖方法

请添加图片描述

Makefile第一性原则

所以单个make指令 表示编译吗

不一定,在make中它会默认 makefile文件中的第1个依赖关系具体实现

请添加图片描述

简写操作

依赖方法的文件名很麻烦,可不可以简写呢?

输入

$ @ 表示简写依赖方法冒号的左边文件
$ ^ 表示简写依赖方法冒号的右边文件
$ 锁定为依赖方法的冒号,@表示左边, ^ 表示右边

请添加图片描述

隐藏展示依赖方法

每次使用 自动化构建工具,都会展示 具体的依赖方法,若我不想 让它展示呢?

在依赖方法中加入@

请添加图片描述

深入了解

我们将深入一下,自动化构建工具是如何进行工作的?

makefile它有自己的一套依赖关系栈式结构
且在makefile中它会自动帮你保存所写内容

请添加图片描述

时间问题

make常常用于编译,那我可以一直make,一直重新编译吗?

不能的,make指令它会根据源文件和目标文件的新旧 ,判断是否需要重新执行依赖关系进行编译.

翻译成大白话

已经编译过的文件,之后编译器会自动识别 是否编译过
若编译过了就不再编译了,因为可以节省效率,无需重新编译。

那编译器是如何做出判断的呢?

可执行程序和源文件时间
若可执行程序时间大于源文件时间,则无需重新编译
若可执行程序时间小于源文件时间,则需重新编译

深入一点

源文件和可执行程序新旧问题的判断,编译器会将源文件和可执行程序时间转换成时间戳根据大小来进行比较新旧

请添加图片描述

哦,就是时间呢?那很简单呀
不一定
时间分为:

  • Access 访问的时间
  • Modify 修改的时间
  • Change 改变的时间

请添加图片描述

简称为ACMA(访问)C(改变)M(修改)
修改的时间改变的时间不是一样的吗?

不是哦,举个例子
文件等于文件内容(modify)文档属性(change)

请添加图片描述

之前说了Linux当中,一个重要的思想就是一切皆文件
所以
modify文件内容修改的时间
change文档属性修改的时间
文件内容修改一定会引起文档属性的改变,则时间也会引起改变
modif时间改变影响change时间改变 change不一定影响modify改变
例如文档属性可能重命名一下,但不会文档内容改变

如何进行查看时间呢?

stat指令可以查看可执行文件和源文件的时间

请添加图片描述

深入一下

请添加图片描述

这里发现access访问的时间并没有发生变化,这不对
access访问时间应该是更改的是最频繁的,为什么反而没有变化呢?

正是因为
Access访问是最频繁的,要反复写入硬盘中
多个用户使用则效率太低了
如今版本中设置者修改了一下,现在需要根据 modeify和change的频率来进行更改Access的记录时间或者要三四次access访问时间才能记录为一次有效的时间
这样做从而间接的提高了效率

不想进行优化,就想全部更新时间或者指定单独的时间进行更新,可以吗?

touch 更新已有的文件

  • -mmodify单独进行更新

请添加图片描述

  • 若该文件未存在,则会新建文件
    
  • 若已存在,则会将时间全部进行更新。
    
  • 注意:当时间全部进行更新后即make可以重新进行编译.
    

请添加图片描述

这样好麻烦呀,能不能找个一劳永逸的方法就让它重新自动化构建,而不是一直用touch进行更新时间?

可以的
makefile输入伪目标.PHONY

  • 告诉编辑器总是放它通行

请添加图片描述

但是不建议伪目标放入编译实现中,而常常将伪目标放入清理实现中
因为就算将伪目标放入编译中,编译器总是放它通行即重新编译
该重新编译在可执行程序上新增内容编译,这可能导致老的问题依旧还有
所以常常将伪目标放入清理实践中
因为清洗了数据之后 再重新编译
完全先删除可执行程序再重新创建重新编译可以有效避免老的问题

好的,到此为止啦,祝您变得更强
在这里插入图片描述
想说的话

实不相瞒,写的每篇博客都要写五六个小时(加上自己学习和纸质笔记,共八九小时吧),很累希望大佬支持

在这里插入图片描述

道阻且长 行则将至

个人主页:在线OJ的阿川大佬的支持和鼓励,将是我成长路上最大的动力 在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript倍速播放视频

F12打开开发者工具,打开控制台,输入这行代码,视频即可加速播放, 可以调整倍速(2,4,8,16) document. getElementsByTagName("video")[0]. playbackRate16

数论1---整除

概念与基本性质就不说了 例题1:已知a|n,b|n.且axby1,求证:ab|n 即: 所以:ab|n 例题2:设m是一个大于2的正整数,证明:对于任意正整数n,都有 由于我不想打公式了直接拍照…

基于 IP 的 DDOS 攻击实验

一、介绍 基于IP的分布式拒绝服务(Distributed Denial of Service, DDoS)攻击是一种利用大量受控设备(通常是僵尸网络)向目标系统发送大量请求或数据包,以耗尽目标系统的资源,导致其无法正常提供服务的攻击…

[图解]企业应用架构模式2024新译本讲解06-表模块3

1 00:00:00,800 --> 00:00:03,470 接下来,我们来看这个序列图 2 00:00:04,400 --> 00:00:05,740 因为序列图比较大 3 00:00:06,180 --> 00:00:09,770 我们就不好放在幻灯片里面来看了 4 00:00:11,060 --> 00:00:12,130 下面还有很多 5 00:00:13,950…

制作ChatPDF之Elasticsearch8.13.4搭建(一)

Elasticsearch8.x搭建 在Windows系统上本地安装Elasticsearch的详细步骤如下: 1. 下载Elasticsearch 访问 Elasticsearch下载页面。选择适用于Windows的版本8.13.4,并下载ZIP文件。 2. 解压文件 下载完成后,找到ZIP文件(例如…

实操专区-第15周-课堂练习专区-漏斗图与金字塔图

实操专区-第15周-课堂练习专区-漏斗图 下载安装ECharts,完成如下样式图形。 代码和截图上传 基本要求:下图3选1,完成代码和截图 完成 3.1.3.16 漏斗图中的任务点 基本要求:2个选一个完成,多做1个加2分。 请用班级学号姓…

mybatis增删改查模板设置及设置调用

mybatis增删改查模板设置 系统配置文件完成以及连接好数据之后,就可以用这个mybatis了,首先写这个数据库的增删改查模板StashMapper.xml,这个东西是要放在DAO层中的奥,切记。 1.编写mybatis对应数据库的增删改查模板 在我的Sta…

SSL发送邮件时如何配置客户端确保安全性?

怎么使用SSL安全协议通过AokSend发送加密的电子邮件? SSL是一种常用的加密通信协议,用于确保数据在客户端和服务器之间的安全传输。AokSend将讨论如何通过配置客户端确保SSL发送邮件的安全性,并介绍如何使用SSL安全协议通过AokSend发送加密的…

IDEA中,MybatisPlus整合Spring项目的基础用法

一、本文涉及的知识点【重点】 IDEA中使用MybatisPlus生成代码,并使用。 Spring整合了Mybatis框架后,开发变得方便了很多,然而,Mapper、Service和XML文件,在Spring开发中常常会重复地使用,每一次的创建、修…

翼龙面板是什么,如何进行搭建

翼龙面板是一个开源的,用于游戏服务器管理的程序,可以方便地在网页界面中创建Minecraft,起源引擎游戏和Teamspeak3 服务器。 它使用前后端程序,因此可以创建多后端节点,对游戏服务器和服务器节点进行统一管理。 对游戏…

java项目之智能家居系统源码(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的智能家居系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于Springboot的智能家居系…

WPS部分快捷操作汇总

记录一些个人常用的WPS快捷操作 一、去除文档中所有的超链接: 1、用WPS打开文档; 2、用Ctrla全选,或者点击上方的【选择】-【全选】,选中文档全部内容; 3、按CTRLSHIFTF9组合键,即可一次性将取文档中所有…

yolov10/v8 loss详解

v10出了就想看看它的loss设计有什么不同,看下来由于v8和v10的loss部分基本一致就放一起了。 v10的论文笔记,还没看的可以看看,初步尝试耗时确实有提升 好记性不如烂笔头,还是得记录一下,以免忘了,废话结束…

[数据集][目标检测]数据集VOC格式岸边垂钓钓鱼fishing目标检测数据集-4330张

数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):4330 标注数量(xml文件个数):4330 标注类别数:1 标注类别名称:["fishing"] 每…

基于LQR控制算法的电磁减振控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于LQR控制算法的电磁减振控制系统simulink建模与仿真。仿真输出控制器的收敛曲线。 2.系统仿真结果 3.核心程序与模型 版本:MATLAB2022a 08_029m 4.系统原理…

Python的第三方库OS库

读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 文章目录 🔥前言🚀OS/SHUTIL 的方法描述🚀OS/SHUTIL…

Html/HTML5常用标签的学习

课程目标 项目实战,肯定就需要静态网页。朝着做项目方式去学习静态网页。 01、编写第一个html工程结构化 cssjsimages/imgindex.html 归档存储和结构清晰就可以。 02、HTML标签分类 认知:标签为什么要分类,原因因为:分门别类…

泄漏libc基地址

拿libc基地址 方法一:格式化字符串 格式化字符串,首先确定输入的 AAAA 在栈上的位置(x)。使用 elf.got[fun] 获得got地址。利用格式化字符串,构造payload泄漏got地址处的值,recv接受到的字符串中&#xf…

rust安装

目录 一、安装1.1 在Windows上安装1.2 在Linux下安装 二、包管理工具三、Hello World3.1 安装IDE3.2 输出Hello World 一、安装 1.1 在Windows上安装 点击页面 安装 Rust - Rust 程序设计语言 (rust-lang.org),选择"下载RUSTUP-INIT.EXE(64位)&qu…

Django里多app

在 Django 里的某一个项目,里面得包含很多 App (功能),那么如何在该项目里管理这么多App呢? 先说明下背景:未先创建 apps 文件夹来存各个app文件夹,直接在项目文件目录里创建各个app。为了便于管理,得将各…