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

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

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

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

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

在这里插入图片描述

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

这是目录

  • 众所周知
    • Makefile第一性原则
    • 简写操作
    • 隐藏展示依赖方法
  • 深入了解
    • 时间问题

众所周知

自动化构建工具是指

  • 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.mzph.cn/bicheng/20173.shtml

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

相关文章

配置arduino和ESP8266

首先准备好arduino 的IDE和ESP8266的驱动以及板子 1.安装驱动,双击x64的版本驱动,安装好以后,在资源管理器检查端口,比如下下图出现的COM4就是esp8266所使用的端口 2.安装好arduino最好不要在路径中存在中文符号,打开…

水滴式粉碎机:多功能饲料粉碎设备

饲料粉碎机是一种专门用于将各种饲料原料进行粉碎处理的机械设备。无论是玉米、小麦等谷物,还是豆粕、鱼粉等动物性原料,甚至是一些粗纤维含量较高的秸秆、牧草等,都可以经过饲料粉碎机的处理,变成适合畜禽消化吸收的精细饲料。这…

521源码-游戏源码-2024卡牌回合自走棋手游《梦间集》推出全新Linux手工服务端

首款稀有卡牌回合自走棋手游《梦间集》推出全新Linux手工服务端整理 更多网站源码,游戏源码,学习教程,请点击👉-521源码-👈获取最新资源 本游戏下载地址:2024卡牌回合自走棋手游《梦间集》推出全新Linux手…

【再探】设计模式—中介者模式、观察者模式及模板方法模式

中介者模式让多对多的复杂引用关系变成一对多,同时能通过中间类来封装多个类中的行为,观察者模式在目标状态更新时能自动通知给订阅者,模版方法模式则是控制方法的执行顺序,子类在不改变算法的结构基础上可以扩展功能实现。 1 中…

ChatGPT AI专题资料合集【65GB】

介绍 ChatGPT & AI专题资料合集【65GB】 🎁【七七云享】资源仓库,海量资源,无偿分享√

文件系统小册(FusePosixK8s csi)【1 Fuse】

文件系统小册(Fuse&Posix&K8s csi)【1 Fuse:用户空间的文件系统】 Fuse(filesystem in userspace),是一个用户空间的文件系统。通过fuse内核模块的支持,开发者只需要根据fuse提供的接口实现具体的文件操作就可以实现一个文…

【测评|白嫖】雨云宁波新区,2C4G200M,公测期间全免费!

雨云香港三区云服务器,高性能的 Xeon Platinum 处理器 企业级 NVME SSD 高性能云服务器。 一键白嫖链接:https://www.rainyun.com 本篇纯测评,无任何广告,请放心食用!! 本次测评服务器配置如下&#xff1…

用万界星空科技低代码平台能快速搭建一个云MES系统

一、低代码平台与MES:智能制造的新篇章 随着工业4.0和智能制造的兴起,企业对于生产过程的数字化、智能化需求日益迫切。传统的MES系统实施周期长、成本高,成为许多企业数字化转型的瓶颈。而低代码开发平台的出现为这一问题提供了新的解决思路。 二、万界…

linux可观测性ebpf(一) ----------- 环境搭建

参考书籍 开发环境 Ubuntu 18.04.6 LTS (GNU/Linux 5.4.0-150-generic x86_64) 1.1 下载内核源码 cd /usr/src/ sudo git clone -b v5.4 https://github.com/torvalds/linux.git1.2 下载书中代码 git clone https://github.com/bpftools/linux-observability-with-bpf1.3 编…

海外媒体通稿:9个极具创意的旅游业媒体推广案例分享-华媒舍

如今,旅游业正迅速发展,媒体推广成为吸引游客的关键。为了更好地展示旅游目的地,许多创意而富有创新的媒体推广策略应运而生。本文将介绍九个极富创意的旅游业媒体推广案例,为广大从业者带来灵感和借鉴。 1. 视频系列:…

4. MySQL 约束

文章目录 【 1. 主键约束 PRIMARY KEY 】1.1 在创建表时设置主键约束设置单字段主键在创建表时设置联合主键 1.2 在修改表时添加主键约束1.3 删除主键约束1.4 主键自增长 AUTO_INCREMENT指定自增字段初始值自增字段不连续 【 2. 外键约束 FOREIGN KEY 】2.1 在创建表时设置外键…

Mybatis数据加密解密

文章目录 Mybatis数据加密解密一、自定义注解二、自定义参数处理拦截器结果集拦截器加密解密 Mybatis数据加密解密 方案一:Mybatis拦截器之数据加密解密【Interceptor】 拦截器介绍 Mybatis Interceptor 在 Mybatis 中被当作 Plugin(插件),不知道为什么…

ARM32开发——LED点灯

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 点灯的两种方式灌入电流法输出电流法扩展板点灯点灯方式点亮LED1-4完整实现 点灯的两种方式 不同颜色LED,达到相同亮度…

[数据集][目标检测]猫狗检测数据集VOC+YOLO格式8291张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):8291 标注数量(xml文件个数):8291 标注数量(txt文件个数):8291 标注…

ETLCloud中如何使用Kettle组件

ETLCloud中如何使用Kettle组件在当今数据驱动的时代,数据处理和分析已成为企业决策的关键。为了更高效地处理海量数据,ETL(Extract, Transform, Load)工具变得至关重要。而在众多ETL工具中,Kettle作为一款开源、灵活且…

攻防实战 | 邮件高级威胁检测与自动化响应

历经三个月的时间,年度重磅直播节目Fortinet 2024年度“Demo季”近日终于迎来了备受瞩目的压轴大戏——Demo Day第三期,主题为《新邮件安全下的高级威胁检测与自动化响应》。继成功举办了前两期《企业网络中的多源威胁情报自动化整合与集成》和《应急响应…

Pycharm使用时的红色波浪线报错——形如‘break‘ outside loop

背景: 我在一个方法中,写了一个if判断,写了一个break,期望终止这个函数,编辑器出现报错 形如下图 视频版问题教程: Pycharm下出现波浪线报错,形如break outside loop 过程: 很奇…

IDEA一键启动多个微服务

我们在做微服务项目开发的时候,每次刚打开IDEA,就需要把各个服务一个个依次启动,特别是服务比较多时,逐个点击不仅麻烦还费时。下面来说一下如何一键启动多个微服务。 操作步骤 点击Edit Configurations 2.点击“”,…

【设计模式】JAVA Design Patterns——Facade(外观模式)

🔍目的 为一个子系统中的一系列接口提供一个统一的接口。外观定义了一个更高级别的接口以便子系统更容易使用。 🔍解释 真实世界例子 一个金矿是怎么工作的?“嗯,矿工下去然后挖金子!”你说。这是你所相信的因为你在使…

性价比为王,物流商怎么选择高效的国际物流管理平台

在全球化贸易日益繁荣的今天,国际物流行业作为链接国内商家和海外市场的重要桥梁,发挥着极其重要的作用。 然而,随着国际物流市场竞争的加剧,对物流商来说,也面临着成本管控和效率提升的双重挑战。今天我们会重点探讨…