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

相关推荐
2301_819287121 小时前
ce第六次作业
linux·运维·服务器·网络
武汉联从信息2 小时前
如何使用linux日志管理工具来管理oracle osb服务器日志文件?
linux·运维·服务器
天天进步20152 小时前
STUN服务器实现NAT穿透
运维·服务器
月如琉璃2 小时前
1.gitlab 服务器搭建流程
服务器·gitlab
eybk2 小时前
Pytorch+Mumu模拟器+萤石摄像头实现对小孩学习的监控
学习
6.942 小时前
Scala学习记录 递归调用 练习
开发语言·学习·scala
Kika写代码2 小时前
【微信小程序】页面跳转基础 | 我的咖啡店-综合实训
服务器·微信小程序·小程序
Aileen_0v02 小时前
【AI驱动的数据结构:包装类的艺术与科学】
linux·数据结构·人工智能·笔记·网络协议·tcp/ip·whisper
州周3 小时前
Ftp目录整个下载
linux·服务器·数据库
Jackey_Song_Odd3 小时前
Ubuntu 24.04.1 解决部分中文字符(门、径)显示错误的问题
linux·ubuntu