make 和 Makefile/makefile

1.概念

make 是一条命令 , Makefile/makefile是一个文件。 【 makefile 是一个 写了如何编译文件,形成可执行程序的文件】

2. 语法

1. 基本语法

依赖关系   // 依赖关系 由 目标名和依赖文件列表组成,语法为 目标名 : 依赖文件列表

【Tab】依赖方法

此处的 test : test.c 是依赖关系, test 的依赖文件是 test.c ,此处依赖文件列表中只有test.c一个依赖文件

【Tab】gcc -o test test.c   此处的 gcc -o test test.c 是依赖方法

  1. 形成空依赖关系的方法:

此处的 .PHONY: 是一个语法规定,类似于关键字。

.PHONY: 自定义的伪目标的目标名

.PHONY 会使得依赖方法忽略掉时间.

目标名:

【Tab】 依赖方法

此处的 clean:      是一个空依赖关系

【Tab】 rm test    此处的 rm  test 是依赖方法

  1. 依赖方法可以是任意指令:

Make默认会把回显执行的命令,@符号关闭命令回显

Eg

(4)  % , $<

%.是Makefile/makefile中的通配符。

%.c 是把当前目录下的.c文件 展开到依赖列表中

$< 是 把 依赖关系中的 依赖文件 一个一个的交给 gcc -c 选项,形成同名的 .o 文件

5. Makefile/makefile中也能定义变量。 $(变量名)使用变量 , $^ , $@

Makefile/makefile中定义变量不用变量类型。 $(变量名) 是把变量名展开。$^是所有依赖文件列表, $@是目标文件

如下图:

$(bin):$(src)  => 相对于  proc : proc.c

此次的 $^  => 相当于 $(src) 即, proc.o

此处的 $@  => 相当于 $(bin) 即 proc

3. Makefile/makefile 和 make 的基本原理

(1). Makefile/makefile 的文件名,会被make从上往下扫描, 第一个目标名是缺省要形成的。如果我们想执行其他组的依赖关系和依赖方法,可以通过 make 目标名实现,eg:make name

(2) make Makefile/makefile 在执行gcc命令的时候,如果发生语法错误,就会终止推导过程

Eg: 显然 由于test.c中存在语法错误,因此编译test.c的命令执行完产生报错无法形成可执行程序,终止了推导过程。 具体表现在此处生成 test 且 没有 执行 each “编译结束…”命令

(3) make 解释 Makefile/makefile 的时候 是 会自动推导的, 推导原则是一直推导,推导过程 不执行依赖方法。直到 推导到有依赖文件存在,然后再逆向的执行所有的依赖方法。如下图

  1.  make 默认只形成一个可执行程序。 使make形成多个可执行程序的方法

如果想形成两个可执行程序, 那么 .PHONY: 一个伪目标,该伪目标的 依赖文件列表 是 两个未形成的依赖文件, 因此该依赖方法进栈, 然后 推导,直到推导到有依赖文件存在,然后逆向的执行所有的依赖方法。

all : $(bin1) $(bin2) ,但是bin1 , bin2 并未不存在,那么向下推导,$(bin1) : $(src1) 依赖关系,然后执行 对应的 依赖方法,从而形成bin1。 然后继续向下推导, $(bin2): $(src2) 依赖关系,然后执行对应的依赖方法,从而形成 bin2 。 此时 bin1 和 bin2 文件都有了,且 栈顶 为 all : $(bin1) $(bin2) 的依赖方法,因此执行该依赖方法,而此依赖方法恰好为空而已

4. 为什么有时候程序需要重新编译,有时候不需要? 为什么?

对于源文件和可执行程序-> 两者都是文件

文件 = 内容 + 属性

时间也是文件的属性

查看文件时间: stat 文件名

文件内容最新被修改的时候是 Modify

文件属性最新被修改的时间是Change

Access时间是文件最新的访问时间,但是实际上现在已经是 当访问次数达到一定量的时候才会对 access时间进行变化。

修改文件的属性时,只有文件的 change 时间发生变化, 但是有些命令在改变文件属性同时对文件的modify时间进行改变,不过这种改变并不是因为文件属性被改变而导致的

修改文件的内容时,文件的modify会发生改变,change时间可能发生改变。原因是当文件内容被修改的时候 可能会导致文件的属性也发生修改。(毕竟 文件大小也是文件属性)。

总结:文件的创建时间也就是modify时间。 程序有时候需要重新编译,有时候不需要的原因是 当源文件的modify时间 大于 编译生成后的可执行程序的modify时间的时候,会对源文件进行重新编译, 当源文件的modify时间小于之前生成的可执行程序的modify时间的时候 不会对源文件的modify文件进行重新编译。

.PHONY: 会使得依赖方法忽略掉时间。 因此如下图时,会总是对test.c 进行编译,因为

.PHONY: 使得下文的依赖方法忽略掉了时间,即: test.c 的modify时间 和 test 的modify的时间对比被忽略了。

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

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

相关文章

Playwright快速入门(TypeScript版)

文章目录 1. 前言1. 系统环境要求2. Playwright介绍3. 安装Playwright4. 运行示例测试5. HTML 测试报告6. 在UI模式下运行测试示例7. 更新Playwright版本 1. 前言 Playwright 相比 Selenium&#xff0c;具有多浏览器支持、现代化 API、更快性能、精细页面控制、自动等待元素、…

医学数据分析实训 项目三 关联规则分析作业--在线购物车分析--痹症方剂用药规律分析

文章目录 项目三 关联规则分析一、实践目的二、实践平台三、实践内容任务一&#xff1a;在线购物车分析&#xff08;一&#xff09;数据读入&#xff08;二&#xff09;数据理解&#xff08;三&#xff09;数据预处理&#xff08;四&#xff09;生成频繁项集&#xff08;五&…

什么是 HTTP/3?下一代 Web 协议

毫无疑问&#xff0c;发展互联网底层的庞大协议基础设施是一项艰巨的任务。 HTTP 的下一个主要版本基于 QUIC 协议构建&#xff0c;并有望提供更好的性能和更高的安全性。 以下是 Web 应用程序开发人员需要了解的内容。 HTTP/3 的前景与风险 HTTP/3 致力于让互联网对每个人…

[数据集][图像分类]茶叶病害分类数据集6749张7类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;6749 分类类别数&#xff1a;7 类别名称:["Unlabeled","alg…

项目实现:云备份②(文件操作、Json等工具类的实现)

云备份 前言文件操作实用工具类设计文件属性的获取文件的读写操作文件压缩与解压缩的实现文件目录操作 Json 实用工具类设计编译优化 前言 如果有老铁不知道当前项目实现的功能是什么的话&#xff0c;可以先移步这篇文章内容&#xff1a; 云备份项目的介绍 其中介绍了云备份项…

在 Dify 中高效利用 SiliconCloud API

引言 SiliconCloud 以其丰富的模型库和卓越的处理速度&#xff0c;在 Dify 平台上实现高效工作流和智能代理变得轻而易举。本文将指导您如何在 Dify 中集成 SiliconCloud 的强大功能。 集成 SiliconCloud 模型 步骤一&#xff1a;设置 SiliconCloud 账户 首先&#xff0c;您…

5. Python之数据类型

Python数据类型有数值型&#xff0c;字符串型&#xff0c;布尔型等等 内置函数type()&#xff0c;可以查看变量的数据类型 。 一、数值类型 整数&#xff08;没有小数部分&#xff0c;包含正整数&#xff0c;负整数&#xff0c;0&#xff0c;默认为十进制数&#xff09;&…

PHP:强大的Web开发语言

PHP&#xff1a;强大的Web开发语言 一、PHP 简介及优势 PHP 的基本概念 PHP&#xff08;PHP: Hypertext Preprocessor&#xff09;即 “超文本预处理器”&#xff0c;是一种通用开源脚本语言&#xff0c;最初由 Rasmus Lerdorf 于 1994 年创建。它可以在服务器上执行&#xf…

正则表达式匹配整数与浮点数失败与解决方案

正则表达式匹配整数与浮点数失败与解决方案 问题描述问题分析解决方案总结 问题描述 在处理数据的时候需要提取文本内整数与浮点数&#xff0c;这个时候想到使用正则表达式&#xff0c;咨询百度文心一言给出以下方案及参考代码 import re text "我有100元&#xff0c;…

华为地图服务功能概览 -- HarmonyOS自学7

华为地图服务式Harmony OS生态下的一个地图服务&#xff0c;为开发者提供强大而便捷的地图能力&#xff0c;助力全球开发者实现个性化地图呈现&#xff0c;地图搜索和路线规划功能。 主要包括七大功能&#xff1a;静态图&#xff0c;场景化控件&#xff0c;地点搜索&#xff0c…

函数的认识(二)

函数的基础知识可查看&#xff1a;函数的认识&#xff08;一&#xff09; &#xff08;1&#xff09;函数说明文档 函数是纯代码语言&#xff0c;想要理解其含义&#xff0c;就需要一行行的去阅读理解代码&#xff0c;效率比较低。 我们可以给函数添加说明文档&#xff0c;辅…

Python 解析 Charles JSON Session File (.chlsj)

Charles 代理&#xff0c;是一款抓包软件&#xff0c;可以帮助我们抓取浏览器请求跟响应。 1、在 Filter 里面输入需要抓包的网址 2、右键 Export Session 3、文件类型选择 JSON Session File (.chlsj) 保存 4、解析响应的数据结构 response.body.text 是文本字符串。 # 导入…

Navicat使用 笔记04

Navicat调用数据库 1.创建一个自己的链接&#xff08;文件-->新建连接-->MySQL&#xff09; 进入到这个界面中&#xff1a; 【注意&#xff1a;密码是下载登录软件时设定过的】 创建一个连接完成&#xff08;通过双击激活&#xff09;。 2.在创建好的连接中创建数据库…

Linux-mysql5.7-mysql8.0安装包下载及安装教程,二合一

一、安装包下载 1、手动下载 MySQL :: Download MySQL Community Server 2、wegt下载 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 登录自己的liunx &#xff0c;复制上面的命令下载。 二、手动安装 1、上传压缩包到…

蓝桥杯-基于STM32G432RBT6的LCD进阶(LCD界面切换以及高亮显示界面)

目录 一、页面切换内容详解 1.逻辑解释 2.代码详解 code.c&#xff08;内含详细讲解&#xff09; code.h main.c 3.效果图片展示 ​编辑 二、页面选项高亮内容详解 1.逻辑解释 2.读入数据 FIRST.第一种高亮类型 code.c&#xff08;内含代码详解&#xff09; code.…

kubernetes中pause容器的作用与源码详解

概述 摘要&#xff1a;上一篇文章我们介绍了kubernetes是如何通过pause容器来构建一个pod。本文我们对pause容器做一个总结&#xff0c;并再此基础上次深入浅出&#xff0c;从pause容器的源码详细了解pause容器的实现原理。 正文 pause容器是什么 在 Kubernetes 中&#xff…

超高速传输 -- Fixed Grid与Flexible Grid

Fixed Grid 传统的40波/80波DWDM系统采用Fixed Grid固定光谱方式&#xff0c;波长间隔固定为100GHz或者50GHz&#xff0c;中心频率也是固定的。在Fixed Grid方式下&#xff0c;带宽无法灵活调配。 随着系统中信号速率的提升&#xff0c;光信号的频谱也在变宽&#xff1b;当多速…

SpringSecurity原理解析(八):CSRF防御解析

一、CsrfFilter CsrfFilter 主要功能是用来防止csrf攻击 一、什么是CSRF攻击 跨站请求伪造&#xff08;英语&#xff1a;Cross-site request forgery&#xff09;&#xff0c;也被称为 one-click attack 或者 session riding&#xff0c;通常缩写为 CSRF 或者 XSRF&#xff0c…

有关C# .NET Core 过滤器的使用

想用一个过滤器实现特定接口的审核日志记录&#xff0c;结果报了错&#xff0c;看了看感觉有些基础要补&#xff0c;所以想记录下来 错误&#xff1a; 在属性过滤器中使用了依赖注入&#xff0c;结果在应用在控制层接口时报了传参的错 //过滤器 public class AuditRecordFil…

数据时代,职场离不开的远程控制工具

中秋了大概率是在正常放假了吧&#xff0c;如果突发遇到需要你处理的文件怎么办呢&#xff1f;其实有远程操作工具你就不用到办公室了。向日葵远程控制软件这些工具就可以帮我们远程实现控制电脑操作。如果你也有这方面需求就继续看吧&#xff0c;这次我将介绍几款我用过效果比…