make/makefile

首先什么是make和makefile呢?先简单说,make是一条命令,makefile是一个文件,这个文件中存的是依赖关系和依赖方法,那么为什么会有这两个东西呢?

首先我们知道在VS2019中,我们可以直接创建一个工程,去这个工程里面可以创建多个源文件和头文件,我们要运行代码就直接点按钮就可以了。但是在Linux中每个文件都是独立创建的,它们顶多在一个目录下,但是文件之间无法产生联系,于是我们就可以在此目录下创建一个叫makefile的文件(m也可以大写),它里面存一定的信息表示把一些文件联系起来,就是我们上面所说的依赖关系和依赖方法。创建完文件填好依赖关系和依赖方法退出来使用make这个命令就可以了

那么什么叫依赖关系和依赖方法呢?依赖关系就是为什么用make去帮你执行一些命令,依赖方法是怎么去帮你,下面我用一个最简单的例子来使用一下make和makefile

我们只建一个.c 文件和makefile文件,makefile中写入一下内容

第一行就是我们说的依赖关系,左边是目标文件,右边是依赖文件列表,第二行是依赖方法

然后退出来用make命令就可以生成可执行程序了

当然了,我们只能使用一次make,因为源文件不改重新make也没有用

那么它内部是怎么实现的呢?

我们用stat+文件名可以查看文件的时间信息

我们可以看到有access modify change三个时间

access是最近的访问时间,当我们连续访问文件内容并用stat时,这个access时间是不会变化的,因为我们的访问次数可能会特别多,如果每次都实时刷新的话对系统的负担可能会比较大

modify是文件内容被修改那么这个时间就会刷新

change是文件的属性被修改,那么这个时间就会被刷新

综上所述,我们的make看的是哪个时间呢?就是modify,因为属性被修改并不代表内容被修改(比如说改变权限chmod),而内容被修改才是真的需要重新编译。但是内容被修改属性肯定被修改,因为属性包括文件大小,内容被修改,文件大小就会被修改。

那我们就算没修改内容但还是想让文件重新编译可以用touch+文件名命令,这个命令是没有此文件就创建,有了就刷新modify时间

当然了,我们也可以把makefile中的目标文件设置成伪目标,他就可以让每次使用make都重新编译,只需要加上一句代码

当然只是这么说,我们一般没必要让它每次都编译,就按照系统的来就行,我们一般把clean设置成伪目标,让每次clean都可以执行,clean我们下边会讲

在VS中有清理解决方案,在这里我们也可以设置

我们要使用就用make clean这个命令就可以

也就是说只有第一个产生目标文件使用make,后面都是用make+目标文件

我们这个makefile中也是有一些其他的语法的,比如说替换和定义变量,那么原来的写法就可以写成这样

还有这个文件里边的语法推导过程

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

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

相关文章

474 一零和

题目 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。示例 1:输入:strs ["1…

Linux系统中make/Makefile的介绍

文章目录 前言一、make命令二、makefile功能介绍1.makefile文件的编写格式2.hello.c文件内容3.makefile文件4.安装make命令 总结 前言 在linux系统中,我们对项目文件进行处理的时候会不方便,因此我们需要对文件的编译进行自动化处理。 下面就是在Linux系…

1、docker 基础命令

1、docker 运行镜像 docker run image tag 2、创建dockerfile&#xff08;构建容器的相关命令&#xff09; vim DockerFile 3、docker 构建容器镜像 docker build -t <image_name> . 4、docker 分层 5、查看镜像 docker images 6、docker 执行 docker run --name &…

web组态(BY组态)接入流程

技术文档 官网网站&#xff1a;www.hcy-soft.com 体验地址&#xff1a; www.byzt.net:60/sm 一、数据流向图及嵌入原理 数据流向 嵌入原理 二、编辑器调用业务流程图 三、集成前需要了解的 1、后台Websocket端往前台监控画面端传输数据规则 后台websocket向客户端监控画面…

模型优化_XGBOOST学习曲线及改进,泛化误差

代码 from xgboost import XGBRegressor as XGBR from sklearn.ensemble import RandomForestRegressor as RFR from sklearn.linear_model import LinearRegression as LR from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split,c…

Linux: GDB 调试工具

概念&#xff1a; Linux GDB&#xff08;GNU Debugger&#xff09;是一个功能强大的调试工具&#xff0c;用于调试C、C等编程语言的程序。它可以帮助开发人员定位和修复程序中的错误。 GDB 的使用 &#xff1a; 激活和进入工作模式&#xff1a; gdb 需要调试的文件 进入 …

【Java设计模式】三、

文章目录 0、案例&#xff1a;咖啡屋1、简单工厂模式 静态工厂&#xff08;不属于23种之列&#xff09;2、工厂方法模式3、抽象工厂模式4、建造者模式5、原型设计模式 0、案例&#xff1a;咖啡屋 模拟咖啡店点餐。咖啡有多种&#xff0c;抽象类&#xff0c;子类为各种咖啡。咖…

MySQL查询数据不一致

在您提供的两个查询中&#xff0c;您发现了查询结果的数据量不一致&#xff0c;一个查询结果为404条&#xff0c;另一个查询结果为410条。为了优化这两个查询并确保结果的一致性&#xff0c;您可以尝试以下几点&#xff1a; 1. **统一字段命名**&#xff1a;在两个查询中确保使…

前端面试题汇总(一)

1.html语义化 HTML语义化是指在编写HTML代码时&#xff0c;尽可能使用具有明确含义的标签来描述页面内容的结构和意义&#xff0c;以便让浏览器、搜索引擎和开发者更好地理解和解释页面内容。通过使用语义化的HTML标签&#xff0c;可以提高页面的可访问性、可维护性和可读性&a…

2.29作业

T课上实现通信代码总结&#xff1a; 程序代码&#xff1a; TCPSER.c #include<myhead.h> #define SER_IP "192.168.244.140" //服务器IP #define SER_PORT 9999 //服务器端口号 int main(int argc, const char *argv[]) {//1.创建用于监…

为什么猫咪挑食不吃猫粮?适口性好、普口性价的主食冻干推荐

现代养猫人士往往把自家的小猫看作是生活中的小宝贝&#xff0c;十分宠爱。最令人头疼的就是猫咪挑食不吃猫粮&#xff0c;为什么猫咪挑食不吃猫粮&#xff1f;猫咪挑食应该怎么办&#xff1f;今天为大家分享一个既不让咱宝贝猫咪受罪又可以改善猫咪挑食的方法。 一、为什么猫咪…

深入理解nginx的https sni机制

目录 1. 概述2. 初识sni3. nginx的ssl证书配置指令3.1 ssl_certificate3.2 ssl_certificate_key3.3 ssl_password_file4. nginx源码分析4.1 给ssl上下文的初始化4.2 连接初始化4.3 处理sni回调4.2 动态证书的加载5. 总结阅读姊妹篇: 深入理解nginx的https alpn机制 1. 概述 SN…

Vue+SpringBoot打造音乐偏好度推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 音乐档案模块2.1.2 我的喜好模块2.1.3 每日推荐模块2.1.4 通知公告模块 2.2 用例图设计2.3 实体类设计2.4 数据库设计 三、系统展示3.1 登录注册3.2 音乐档案模块3.3 音乐每日推荐模块3.4 通知公告模…

javase_进阶 day8 递归,异常

递归 递归介绍 方法直接或者间接调用本身注意&#xff1a;递归如果没有控制好终止&#xff0c;会出现递归死循环&#xff0c;导致栈内存溢出现象一些算法题的实现, 都需要使用递归 public class RecursionDemo1 {/*递归介绍: 方法直接或者间接调用本身*/public static void …

外包干了6个月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2019年我通过校招踏入了重庆一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…

Dockerfile(1) - FROM 指令详解

FROM 指明当前的镜像基于哪个镜像构建dockerfile 必须以 FROM 开头&#xff0c;除了 ARG 命令可以在 FROM 前面 FROM [--platform<platform>] <image> [AS <name>]FROM [--platform<platform>] <image>[:<tag>] [AS <name>]FROM […

搭建独立节点通常涉及哪些步骤

1.了解独立节点搭建的基础概念和原理。这包括理解独立节点搭建的含义&#xff0c;即通过云服务器等方式单独搭建自己的网站&#xff0c;以 确保网站的专属性和自主性&#xff0c;并更好地控制数据流动和安全性。1 2.选择服务器类型和配置。这包括根据需求选择合适的服务器&a…

shardingsphere 集成springboot【水平分表】

创建sharding_sphere数据库 在数据库中创建两张表&#xff0c;t_order_1和t_order_2 分片规则&#xff1a;如果订单编号是偶数添加到t_order_1,如果是奇数添加到t_order_2 创建实体类 public class Order { private Integer id; private Integer orderType; private Int…

Java+SpringBoot+Vue+MySQL:员工健康管理技术新组合

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

mysql字节长度限制报错处理方法

报错如下&#xff1a; ERROR 1118 (42000) at line 274: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB pr efix of 0 bytes is stored inline 或者 ERROR 1118 (42000) at line 1240: Row size too large. T…