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的阿川大佬的支持和鼓励,将是我成长路上最大的动力

相关推荐
黄小耶@7 分钟前
linux常见命令
linux·运维·服务器
叫我龙翔8 分钟前
【计网】实现reactor反应堆模型 --- 框架搭建
linux·运维·网络
古驿幽情10 分钟前
CentOS AppStream 8 手动更新 yum源
linux·运维·centos·yum
BillKu11 分钟前
Linux(CentOS)安装 Nginx
linux·运维·nginx·centos
BillKu14 分钟前
Linux(CentOS)yum update -y 事故
linux·运维·centos
a2663789619 分钟前
解决yum命令报错“Could not resolve host: mirrorlist.centos.org
linux·运维·centos
亦世凡华、25 分钟前
【启程Golang之旅】从零开始构建可扩展的微服务架构
开发语言·经验分享·后端·golang
怀旧66639 分钟前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节
粤海科技君1 小时前
如何使用腾讯云GPU云服务器自建一个简单的类似ChatGPT、Kimi的会话机器人
服务器·chatgpt·机器人·腾讯云
傲骄鹿先生1 小时前
阿里云centos7.9服务器磁盘挂载,切换服务路径
服务器·阿里云·磁盘