【Linux】make和Makefile

目录

  • 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更合理些。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目02《游戏-13-开发》Unity3D

基于 项目02《游戏-12-开发》Unity3D , 任务 :宠物系统 及 人物头像血条 首先在主面板MainPanel预制体中新建一个Panel, 命名为PlayerInfo 新建Image,作为头像 新建Slider,作为血条 对Panel组件添加一个水…

案例:CentOS8 在 MySQL8.0 实现半同步复制

异步复制 MySQL 默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主节点如果 crash 掉了,此时主节点上已经提交的事务可能并没有传…

滑动窗口的最大值

题目 239. 滑动窗口最大值 - 力扣(LeetCode) 思路 使用一个队列充当不断滑动的窗口,每次滑动记录其中的最大值: 如何在 O(1) 时间计算最大值,只需要一个特殊的数据结构「单调队列」,push 方法依然在队尾添…

Swift 隐藏宝藏:“逆天改命”调整方法重载(function overloading)优先级

概览 在 Swift 语言中有很多隐藏“宝藏”悄悄深埋在不为人知的角落,静静等待着有缘秃头码农们的大力挖掘。 而在这里,我们将介绍 Swift 语言中一个非常有用的秘技:方法重载优先级判断以及如何改变它。 在本篇博文中,您将学到如下…

腾讯云4核8G服务器性能如何?支持多少用户访问?

腾讯云4核8G服务器支持多少人在线访问?支持25人同时访问。实际上程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素,假设公网带宽太小,流量直接卡在入口,4核8G配置的CPU内存也会造成计算…

移动光猫gs3101超级密码及改桥接模式教程

文章目录 超级管理员账号改桥接模式路由器连接光猫,PPPOE拨号即可!附录:如果需要改桥接的话不知道拨号密码咋办打开光猫Telnet功能Telnet 登录 参考文章 移动光猫吉比特GS3101超级账号获取更改桥接 移动光猫gs3101超级密码及改桥接模式教程 …

奶茶点餐|奶茶店自助点餐系统|基于微信小程序的饮品点单系统的设计与实现(源码+数据库+文档)

奶茶店自助点餐系统目录 目录 基于微信小程序的饮品点单系统的设计与实现 一、前言 二、系统功能设计 三、系统实现 1、商品信息管理 2、商品评价管理 3、商品订单管理 4、用户管理 四、数据库设计 1、实体ER图 2、具体的表设计如下所示: 五、核心代码 …

QXlsx Qt操作excel(3)

QXlsx 是一个用于处理Excel文件的开源C库。它允许你在你的C应用程序中读取和写入Microsoft Excel文件(.xlsx格式)。该库支持多种操作,包括创建新的工作簿、读取和写入单元格数据、格式化单元格、以及其他与Excel文件相关的功能。 关于QXlsx的…

【机器学习】数据清洗之识别异常点

🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步…

猫头虎分享已解决Bug | Go Error: cannot use str (type string) as type int in assignment

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

webgis后端安卓系统部署攻略

目录 前言 一、将后端项目编译ARM64 二、安卓手机安装termux 1.更换为国内源 2.安装ssh远程访问 3.安装文件远程访问 三、安装postgis数据库 1.安装数据库 2.数据库配置 3.数据导入 四、后端项目部署 五、自启动设置 总结 前言 因为之前一直做的H5APP开发&#xf…

HiveSQL——用户行为路径分析

注:参考文档: SQL之用户行为路径分析--HQL面试题46【拼多多面试题】_路径分析 sql-CSDN博客文章浏览阅读2k次,点赞6次,收藏19次。目录0 问题描述1 数据分析2 小结0 问题描述已知用户行为表 tracking_log, 大概字段有&…

Java多态原理

参考 虚方法 JVM杂记:对多态实现原理、虚方法表、虚方法、静态解析、动态链接的一些思考_多态和方法表的关系-CSDN博客 静态分派与动态分派 (JVM)Java虚拟机:静态分派 & 动态分派 原理解析 - 掘金 虚方法表 JVM 栈帧&am…

假期day5

TCP UDP区别 共同点:都是属于传输层的协议 TCP:稳定。面向连接的,有可靠的数据传输服务。传输过程中数据无误,无丢失,无失序,无重复。传输效率低,耗费资源多。数据收发不同步,有沾…

C++基础入门之引用

目录 一.引用 1.1引用和取地址 1.2 别名和原名的区别 1.3 引用的用法 1.31 做参数 1.311 输出型参数:形参改变实参 1.312 可以减少拷贝,增加效率 1.32 引用的约定 1. 引用必须初始化 2. 引用定义后,不能改变指向 4. 给指针取别名 1.33…

『运维备忘录』之 HTTP 响应状态码速查

运维人员不仅要熟悉操作系统、服务器、网络等只是,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大…

4核8g服务器能支持多少人访问?- 腾讯云

腾讯云轻量4核8G12M轻量应用服务器支持多少人同时在线?通用型-4核8G-180G-2000G,2000GB月流量,系统盘为180GB SSD盘,12M公网带宽,下载速度峰值为1536KB/s,即1.5M/秒,假设网站内页平均大小为60KB…

2024年【上海市安全员C3证】考试及上海市安全员C3证新版试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年【上海市安全员C3证】考试及上海市安全员C3证新版试题,包含上海市安全员C3证考试答案和解析及上海市安全员C3证新版试题练习。安全生产模拟考试一点通结合国家上海市安全员C3证考试最新大纲及上海市…

计算机毕业设计基于的农村蔬菜销售系统SSM

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: vue mybatis Maven mysql5.7或8.0等等组成,B…

云计算运维 · 第三阶段 · 代码上线案例

学习b记 第三阶段 持续集成案例 这一章做一个小的案例,git、gitlab、jenkins、sonarqube、maven、shell把这周学的一整个流程串联起来做一个完整的代码发布流程案例,这一部分东西比较多,相对于之前的笔记这个会做的仔细一点。#嘿嘿回家就是…