【Linux】make和Makefile

news2024/11/15 18:46:37

目录

  • make和Makefile

make和Makefile

我们使用vim编辑器的时候,在一个文件里写完代码要进行编译,要自己输入编译的指令。有没有一种可以进行自动化编译的方法——makefile文件,它可以指定具体的编译操作,写好makefile文件,只要一个make指令,就能够对源文件进行自动化编译。

makefile与Makefile两种写法都可以
makefile是文件,make是指令

先创建一个makefile文件,然后进行编写
在这里插入图片描述
在这里插入图片描述

目标文件与依赖文件列表组成依赖关系,依赖方法是具有要执行的操作。依赖文件列表可以不止一个文件。

保存退出,make指令完成编译工作,mybin就是可执行程序
在这里插入图片描述

当再次输入make指令时,会出现以下提示
在这里插入图片描述
提示说明该可执行程序是最新的,不能再编译了。只要可执行程序的最近修改时间比源文件的最近修改时间要来的新,那么该可执行程序就是最新的,此时make就会出现以上状况。

有两种方法可以让可执行程序的时间不是最新:
1️⃣修改源文件的内容:
在这里插入图片描述

2️⃣清理可执行程序:

在这里插入图片描述
在这里插入图片描述
这里可能有些小疑惑,为什么最上行的mybin只用make就可以执行,clean要输入make clean才行?因为makefile和make形成目标文件的时候,默认是从上到下,默认第一个是目标文件,且只有一个。也就是说mybin是目标文件,直接make执行的就是它。这里输入make mybin与make的效果是一样的,但是下面的clean只能输入make clean。
在这里插入图片描述
makefile文件里mybin和clean是可以互换位置的,即clean在最上行,mybin在下行,输入make执行的是clean,要执行mbin输入make mybin。
在这里插入图片描述
在这里插入图片描述
尽管可以调换位置,但还是以前面的写法为主较好。

前面说可执行程序能否再次编译,与它的最近修改时间有关。如果它的最近修改时间比源文件的最近修改时间要新,那么就不能编译;否则可以编译。那到底为什么会这样呢?这与文件的三个时间有关。

先来介绍一下文件的三个时间:
在这里插入图片描述

Access是访问时间,即查看该文件的内容的时间;
Modify是文件内容的修改时间;
Change是文件属性的改变时间。
文件=内容+属性

下面来验证下:
在这里插入图片描述
在这里插入图片描述
我们发现Modify时间改变了,但是Change时间也改变了。因为修改文件的内容,文件的大小也发生了变化,文件大小也是文件属性,即文件属性变化了,所以修改文件内容会连同文件属性一并修改。

在这里插入图片描述
前面修改文件内容或者文件属性会改变Modify或者Change,但是这里访问文件内容Access时间没有发生变化。因为这3个时间里,相对而言访问的次数比修改更加频繁,即操作的时候我们一般都是查看文件较多,修改相对较少,所以系统就设定了一个规则,在短时间内查看文件它的Access时间不会发生改变,这么做其实也起到一个保护作用,因为前面说了,查看文件的操作的频次较高,如果系统频繁给Access时间调整,这样对系统来说比较“累”,所以这个Access时间在过了一定的时间段才发生改变。

在这里插入图片描述
touch指令是创建一个普通文件,如果该文件已存在,那么就会刷新该文件的3个时间,同时也能够重新进行编译。

但是每次都用touch刷新并不是很好,所以这里介绍一个语法:
在这里插入图片描述

.PHONY的作用是修饰mybin目标文件,成为一个伪目标,可以总是被执行。

在这里插入图片描述
此时多次用make它总是能被执行。

通常来说 .PHONY 修饰clean更好些
在这里插入图片描述
因为清理操作就应该总是被执行的。而且还有一点,如果用来修饰mybin,它就可以总是被执行,前面已经验证过了,但是如果总是被执行,我们就不能够知道可执行程序和源文件的最近修改时间谁是新的谁是旧的,因此,修饰clean更合理些。

还有一种写法,类似宏替换:
在这里插入图片描述

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

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

相关文章

读千脑智能笔记10_人类智能存在的风险

1. 人类智能存在的风险 1.1. “末日时钟” 1.1.1. 核战争引发的大火列为地球毁灭的主要原因 1.1.2. 气候变化列为人类自我毁灭的第二大潜在原因 1.2. 除非我们刻意加入自私的驱动力、动机或情感,否则智能机器并不会威胁到人类的生存 1.2.1. 人类在不远的将来会…

c语言游戏实战(7):扫雷

前言: 扫雷是一款经典的单人益智游戏,它的目标是在一个方格矩阵中找出所有的地雷,而不触碰到任何一颗地雷。在计算机编程领域,扫雷也是一个非常受欢迎的项目,因为它涉及到许多重要的编程概念,如数组、循环…

MongoDB存储引擎发展及WiredTiger深入解析(二)

在现代的数据管理领域中,MongoDB作为一个高性能、开源的NoSQL数据库系统,已经在全球范围内被广泛应用。而MongoDB背后的存储引擎,作为其数据管理的核心组件,也经历了不断的发展和优化。本文将对MongoDB的存储引擎发展进行简要回顾…

数据结构——6.2 图的存储与基本操作

6.2 图的存储与基本操作 概念 图的存储 邻接矩阵存有向图和无向图 根据邻接矩阵求度: 无向图:第i个结点的度 第i行 (或第列) 的非零元素个数 有向图: 第i个结点的出度 第i行的非零元素个数 第i个结点的入度 第i列的非零元素个数 第i个结…

数据库恢复

文章目录 前言一、事务1.概念2.定义语句3.ACID特性 二、数据库恢复的必要性1.为什么要进行数据库恢复2.数据库恢复机制的作用 三、数据恢复使用的技术1.数据转储2.登记日志文件 四 、不同故障的数据恢复策略1.事务内部的故障2.系统故障3.介质故障 五、具有检查点的恢复技术1.检…

【机器学习笔记】基于实例的学习

基于实例的学习 文章目录 基于实例的学习1 基本概念与最近邻方法2 K-近邻(KNN)3 距离加权 KNN4 基于实例/记忆的学习器5 局部加权回归5 多种回归方式对比6 懒惰学习与贪婪学习 ​ 动机:人们通过 记忆和行动来推理学习。 1 基本概念与最近邻方…

Cubase学习:音频转midi

大家好!我是诗书画唱!今天要分享的小技巧就是Cubase中的音频转midi的功能!希望对你有所帮助!以后我会在这个账号分享自己知道的很多小技巧!关注我!不迷路!大家也可以关注我后,在我的空间搜索关键词,找到各种对应的教程进行学习,非常的方便!而且自己的教程会尽可能纠…

数据结构~~树(2024/2/8)

目录 树 1、定义: 2、树的基本术语: 3、树的表示 树 1、定义: 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&…

《动手学深度学习(PyTorch版)》笔记8.4

注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过&…

C++初阶:适合新手的手撕vector(模拟实现vector)

上次讲了常用的接口:C初阶:容器(Containers)vector常用接口详解 今天就来进行模拟实现啦 文章目录 1.基本结构与文件规划2.空参构造函数(constructor)4.基本函数(size(),capacity(),resize(),reserve())4.增…

Android---Jetpack Compose学习002

Compose 布局。Compose 布局的目标:1)实现高性能;2)让开发者能够轻松编写自定义布局;3)在 Compose 中,通过避免多次测量布局子级可实现高性能。如果需要进行多次测量,Compose 具有一…

【MySQL】数据库的基础——数据库的介绍、MySQL的介绍和架构、SQL分类、MySQL的基本使用、MySQL的存储引擎

文章目录 MySQL1. 数据库的介绍1.2 主流数据库 2. MySQL的介绍2.1 MySQL架构2.2 SQL分类2.3 MySQL的基本使用2.4 MySQL存储引擎 MySQL 1. 数据库的介绍 数据库(Database,简称DB)是按照数据结构来组织、存储和管理数据的仓库。它是长期存储在计…

安装了多个Java版本如何指定特定版本

Java版本问题的实战场景 机器安装了一个JDK 8的安装版本,默认的安装路径是 C:\Program Files\Java,JDK的安装版本同时安装了JDK 和JRE, 安装的路径分别是: JDK 路径: C:\Program Files\Java\jdk1.8.0_361JRE 路径: C…

Java图形化界面编程——菜单组件 笔记

2.7 菜单组件 ​ 前面讲解了如果构建GUI界面,其实就是把一些GUI的组件,按照一定的布局放入到容器中展示就可以了。在实际开发中,除了主界面,还有一类比较重要的内容就是菜单相关组件,可以通过菜单相关组件很方便的使用…

在 Windows上恢复删除照片的 4 种有效方法

您是否曾在 Windows 7/8/10/11 中不小心删除过照片?如何轻松快速地恢复已删除的照片?在这里这篇文章列出了几种在Windows 11/10/8/7中恢复已删除照片的可行方法,而MiniTool数据恢复软件 是丢失照片恢复的最佳选择。 意外删除的照片 根据一项…

【深度学习每日小知识】卷积神经网络(CNN)

在深度学习领域,卷积神经网络(CNN)彻底改变了视觉分析领域。凭借从图像中提取复杂模式和特征的能力,CNN 已成为图像分类、目标检测和面部识别等任务不可或缺的一部分。本文全面概述了 CNN,探讨了其架构、训练过程、应用…

《CSS 简易速速上手小册》第5章:CSS 动画与过渡(2024 最新版)

文章目录 5.1 CSS 过渡基础:网页的微妙舞步5.1.1 基础知识5.1.2 重点案例:按钮悬停效果5.1.3 拓展案例 1:渐变显示导航菜单5.1.4 拓展案例 2:动态调整元素大小 5.2 关键帧动画:编排你的网页芭蕾5.2.1 基础知识5.2.2 重…

宠物空气净化器哪个牌子好?养猫家庭如何挑选宠物空气净化器?

养猫的朋友都知道,猫咪掉毛是一个令人头痛的问题。猫毛和皮屑会漂浮在空气中,不仅遍布全屋的各个角落,而且清理起来也非常麻烦,特别是那些难以清除的猫毛。更糟糕的是,这些猫毛还可能引发人们的过敏反应,如…

Netty源码系列 之 HashedWheelTimer源码

Netty优化方案 之前总结NioEventLoop以及其他内容时,已经总结了Netty许多优化的设计方案。 1.Selector的优化 (1) 为epoll空转问题提供了解决思路,虽然并没有从根本上解决epoll空转问题,但是使用一个计数器的方式可以减少空转所带来的性能…

[word] word如何打印背景和图片? #微信#其他#经验分享

word如何打印背景和图片? 日常办公中会经常要打印文件的,其实在文档的打印中也是有很多技巧的,可以按照自己的需求设定,下面给大家分享word如何打印背景和图片,一起来看看吧! 1、打印背景和图片 在默认的…