首页 > 系统相关 >【Linux】 深入讲解自动化构建工具

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

时间:2024-06-01 20:01:27浏览次数:35  
标签:文件 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的阿川大佬的支持和鼓励,将是我成长路上最大的动力 在这里插入图片描述

标签:文件,Linux,讲解,源文件,编译,时间,自动化,可执行程序
From: https://blog.csdn.net/2301_81874719/article/details/139303227

相关文章

  • 【Linux基础】tomcat安装
    【Linux基础】tomcat安装文章目录【Linux基础】tomcat安装1、Linux安装软件方式2、安装jdk3、安装tomcat4、防火墙操作5、tomcat停止1、Linux安装软件方式在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下:安装方式特点二进制发布包安装软件已经......
  • 【LInux内核中IO多路复用 背景+原理+直白总结+优缺点】EPoll篇 及大总结
    Linux内核中的epoll多路复用原理是基于事件驱动的一种高效I/O处理机制,它主要用于监视多个文件描述符(filedescriptors,简称fd)的状态并进行事件驱动的I/O操作。epoll相比传统的select和poll机制,在处理大量并发连接时具有更高的效率和更低的资源消耗。以下是epoll多路复用原理......
  • [转帖]在Linux上查看活跃线程数与连接数
     https://www.cnblogs.com/xibuhaohao/p/11413669.html 原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明。简介现如今,有两种常见的软件资源几乎成了Java后端程序的标配,即线程池与连接池,但这些池化资源非常的重要,一旦不够用了,就会导致程序阻塞、性能......
  • CentOS Linux 8x 错误:为仓库 ‘appstream‘ 下载元数据失败 : Cannot prepare interna
    问题描述今天安装CentOS8.5安装完之后,准备更新源仓库环境的时候突然出现错误:为仓库'appstream'下载元数据失败:Cannotprepareinternalmirrorlist:NoURLsinmirrorlist,后面我找了好久没发现有解决这个问题的方法,后面无意看到了https://www.cnblogs.com/cainiaoaixuexi......
  • Vue3的自动化测试怎么做?详细说明一下常用的测试工具和框架
    随着前端技术的飞速发展,Vue3作为一个优秀的前端框架,已经广泛应用于各类项目中。在开发过程中,为了提升代码质量、减少运维成本,自动化测试变得尤为重要。不仅可以提高开发效率,还能确保产品的稳定性。那么,Vue3自动化测试该怎么做呢?本文将详细介绍常用的测试工具和框架。为......
  • Linux 常用命令宝典(超详细) (下)
    书接上回14、管道符“|”cattest.txt|grep'world' #把前边的查询结果,当做后边的数据源来处理.#查询test文档中所有存在'world'的行.15、tail命令#格式:tail[-num-f]要查看的文件 -num:看(末尾)几行-f:持续追踪tailte......
  • Linux 常用命令宝典(超详细) (上)
            在职场中,有很多运维或者开发工作都需要通过命令来完成,很少有用到图形界面。作为一名后端程序员我们必须掌握一些Linux常用的终端命令。Linux发行版的命令大概有200多个,常用的命令有二十余个,本文将详细介绍这些命令。Linux命令格式:#Linux命令格式,如下的......
  • 从网络启动Linux
    目录从网络启动Linux1、提供所需文件2、U-Boot的烧录3、网络配置4、放置内核、设备树文件、根文件系统5、启动Linux从网络启动Linux1、提供所需文件启动需要的mfgtool、linux内核镜像文件zImage、设备树文件.dtb、根文件系统。这些所需资源我都整理和调试后放在云......
  • 宝塔Linux面板-Docker管理(2024详解)
    上一篇文章《宝塔Linux可视化运维面板-详细教程2024》,详细介绍了宝塔Linux面板的详细安装和配置方法。本文详细介绍使用Linux面板管理服务器Docker环境。目录1、安装Docker1.1在线安装​编辑 1.2手动安装1.3运行状态1.4镜像加速2应用商店 3总览 4容器4.1......
  • 宝塔Linux可视化运维面板-详细教程2024
    生产环境的Web服务器多数都是Linux操作系统。包括云服务器在内,都是通过命令行进行服务器的运维和管理。本文详细介绍如何通过宝塔面板实现可视化服务器管理。目录1什么是宝塔面板2Linux面板安装3面板使用3.1登录3.2绑定账号 3.3安装服务器环境套件(可选)3.4软件......