当前位置: 首页 > news >正文

make与makefile

目录

一、make的默认目标文件与自动推导

二、不能连续make的原因

执行原理

touch

.PHONY伪目标

  make指令不回显

makefile多文件管理 

简写依赖方法

三、回车与换行

四、缓冲区


一、make的默认目标文件与自动推导

假设这是一个makefile文件,make的时候默认生成第一行的目标文件 ,make会自动推导makefile中的依赖关系,推导过程是一个栈式结构。

hello:hello.ogcc hello.o -o hello
hello.o:hello.sgcc -c hello.s -o hello.o
hello.s:hello.igcc -S hello.i -o hello.s
hello.i:hello.cgcc -E hello.c -o hello.i

即使我们打乱了下面六行的顺序,结果还是相同,最终编译出来的任然是hello

hello:hello.ogcc hello.o -o hello
hello.o:hello.sgcc -c hello.s -o hello.o
hello.i:hello.cgcc -E hello.c -o hello.i
hello.s:hello.igcc -S hello.i -o hello.s

而如果hello.s为目标文件,那么程序编译到hello.s就会结束了

hello.s:hello.igcc -S hello.i -o hello.shello.i:hello.cgcc -E hello.c -o hello.ihello.o:hello.sgcc -c hello.s -o hello.ohello:hello.ogcc hello.o -o hello  

二、不能连续make的原因

在进行make操作时,我们不能连续make,因为如果源文件已经被编译过了,并且源文件没有被修改,那我们就没有必要编了,这样子可以提高效率。

执行原理

因为一定是先有源文件再有可执行文件的,所以一般而言,源文件的最早修改时间是要比可执行文件早的

如果源文件被修改过,历史上还有可执行文件,那么源文件的最近修改时间一定比可执行文件晚

我们可以使用stat 文件名  来查询文件的时间问题

access 为最近访问时间,但是由于我们不管是进行文件的 内容或者属性修改都会进行访问,因此access会在多次被访问之后才会更新一次

modify则是文件内容被修改的最近一次时间

change是文件属性被修改的最近一次时间,包括文件名,文件大小,文件创建日期,文件的权限等等

值得注意的是因为修改文件内容时,绝大多数时候文件的大小都会改变,因此modify改变大部分情况change也都会改变,而修改文件属性时则不会改变modify

touch

我们如果使用touch 文件名  ,那么 access,modifiy,change都会改变到当前时刻,我们也可以使用选项单个修改

-m 修改modify,但是同时change也会改变

-a改变access

而make是否执行依赖关系,比较的是modify

.PHONY伪目标

那如果我想让对应的依赖关系总是被执行呢?

我们可以在依赖关系前面添加.PHONY:,即为伪目标。添加.PHONY:后依赖关系总是会被执行。我们一般会在clean 的前面添加

mytest.exe : mycode.c                //依赖关系gcc -o mytest.exe mycode.c      //这行的开头要求是一个tab     这行称为依赖方法  
.PHONY: clean
clean: rm -f mytest.exe

  make指令不回显

执行make 和make clean 时依赖方法会进行回显

我们可以在依赖方法前带上@

mytest.exe : mycode.c                @gcc -o mytest.exe mycode.c  

makefile多文件管理 

makefile 还支持多文件管理,例如

processbar: processbar.c main.c  //如果.h文件与这两个文件在同一目录下,那么gcc是能自己找到.文件的

(假设这个项目由processbar.h ,processbar.c,main.c组成)

简写依赖方法

特殊符号$@可以表示依赖关系冒号左边的文件,$^可以表示冒号右边的文件

mytest.exe : mycode.c                gcc -o $@ $^mytest.exe : mycode.c  main.c             gcc -o $@ $^

三、回车与换行

回车指的是将光标移动到改行的开头

换行指的是将光标移动到下一行

四、缓冲区

缓冲区就是c语言维护的一段内存

我们编译并运行代码1

#include <stdio.h>
int main()
{
printf("hello Makefile!\n");
sleep(3);
return 0;
}

会观察到程序会先打印,再停顿三秒

而当我们编译并运行代码2

#include <stdio.h>
int main()
{
printf("hello Makefile!");
sleep(3);
return 0;
}

我们会看到,程序会先停顿三秒,再输出。

这难道是代码执行顺序改变了吗?其实知识因为去掉\n后,printf输出的内容被存到缓冲区内

当我们执行代码3时

#include <stdio.h>
int main()
{
printf("hello Makefile!");
fflush(stdout);
sleep(3);
return 0;
}

效果又会同代码1一样了,这时候因为我们使用fflush刷新了stdout,stdout是标准输出流,即显示器

相关文章:

make与makefile

目录 一、make的默认目标文件与自动推导 二、不能连续make的原因 执行原理 touch .PHONY伪目标 make指令不回显 makefile多文件管理 简写依赖方法 三、回车与换行 四、缓冲区 一、make的默认目标文件与自动推导 假设这是一个makefile文件&#xff0c;make的时候默认生…...

深度神经网络一

文章目录 深度神经网络 (DNN)1. 概述2. 基本概念3. 网络结构 深度神经网络的层次结构详细讲解1. 输入层&#xff08;Input Layer&#xff09;2. 隐藏层&#xff08;Hidden Layers&#xff09;3. 输出层&#xff08;Output Layer&#xff09;整体流程深度神经网络的优点深度神经…...

Pnpm:包管理的新星,如何颠覆 Npm 和 Yarn

在探索现代 JavaScript 生态系统时&#xff0c;我们常常会遇到新兴技术的快速迭代和改进。其中&#xff0c;包管理工具的发展尤为重要&#xff0c;因为它们直接影响开发效率和项目性能。最近&#xff0c;pnpm 作为一种新的包管理工具引起了广泛关注。它不仅挑战了传统工具如 np…...

汽车IVI中控开发入门及进阶(三十二):i.MX linux开发之Yocto

前言: 对于NXP的i.mx,如果基于linux开发,需要熟悉以下文档: IMX_YOCTO_PROJECT_USERS_GUIDE.pdf IMX_LINUX_USERS_GUIDE.pdf IMX_GRAPHICS_USERS_GUIDE.pdf 如果基于android开发,需要熟悉一下文档: Android_Auto_Quick_Start_Guide.pdf ANDROID_USERS_GUIDE.pdf …...

tessy 编译报错:单元测试时,普通桩函数内容相关异常场景

目录 1&#xff0c;失败现象 2&#xff0c;原因分析 1&#xff0c;失败现象 1&#xff0c;在 step 桩函数正常的情况下报错。 2&#xff0c;测试代码执行的数据流 和 step 桩函数内容不一致。 2&#xff0c;原因分析 桩函数分为 test object, test case, test step 三种类别。…...

计算机专业是否仍是“万金油”

作为一名即将参加高考的学生&#xff0c;我站在人生的分岔路口上&#xff0c;面临着选择大学专业的重大抉择。在这个关键节点&#xff0c;计算机相关专业是否仍是炙手可热的选择&#xff1f;  首先&#xff0c;从行业的角度来看&#xff0c;计算机相关专业确实在近年来持续火…...

雷池社区版自动SSL

正常安装雷池&#xff0c;并配置站点&#xff0c;暂时不配置ssl 不使用雷池自带的证书申请。 安装&#xff08;acme.sh&#xff09;&#xff0c;使用域名验证方式生成证书 先安装git yum install git 或者 apt-get install git 安装完成后使用 git clone https://gitee.com/n…...

怎样减少徐州服务器租用的成本?

服务器租用的出现&#xff0c;十分便于网络行业的发展&#xff0c;但是随着服务器租用的广泛应用&#xff0c;整体还是有着一定的成本的吗&#xff0c;不同的服务器类型在价格方面也是不同的&#xff0c;那么企业在选择服务器租用后&#xff0c;怎样才能减少服务器租用的成本呢…...

【性能优化】表分桶实践最佳案例

分桶背景 随着企业的数据不断增长&#xff0c;数据的分布和访问模式变得越来越复杂。我们前面介绍了如何通过对表进行分区来提高查询效率&#xff0c;但对于某些特定的查询模式&#xff0c;特别是需要频繁地进行数据联接查或取样的场景&#xff0c;仍然可能面临性能瓶颈。此外…...

数据仓库的挑战

建设数据仓库是一个复杂且资源密集的过程&#xff0c;需要考虑多个方面。以下是建设数据仓库时常见的挑战及其详细解释&#xff1a; 1. 数据集成 挑战&#xff1a; 数据来源多样&#xff1a;数据来自不同的系统、数据库、文件格式&#xff08;如CSV、JSON、XML&#xff09;、…...

基于ResNet-18的简单分类(新手,而且网络效果不咋滴,就是学个流程)

引言 先看问题&#xff1a; 我手边有一数据集&#xff0c;然后我想分分类&#xff01;~~ 咳咳&#xff0c;最近刚做了一个&#xff1a;训练集有1143张&#xff0c;分为5类&#xff0c;里面图片是打乱的。测试集有248张&#xff0c;想把它分分类看看咋样。 再看一下效果: …...

自动化测试:Autorunner的使用

自动化测试&#xff1a;Autorunner的使用 一、实验目的 1、掌握自动化测试脚本的概念。 2、初步掌握Autorunner的使用 二、Autorunner的简单使用 autoRunner使用方法 新建项目 a) 在项目管理器空白区域,右键鼠标,选择新建项目 b) 输入项目名后,点击[确定]. 在初次打开aut…...

时序预测 | Matlab基于CNN-BiLSTM-Attention多变量时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于CNN-BiLSTM-Attention多变量时间序列多步预测&#xff1b; 2.多变量时间序列数据集&#xff08;负荷数据集&#xff09;&#xff0c;采用前96个时刻预测的特征和负荷数据预测未来96个时刻的负荷数据&…...

软考 系统架构设计师系列知识点之杂项集萃(42)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;41&#xff09; 第67题 Windows操作系统在图形界面处理方面采用的核心架构风格是&#xff08; &#xff09;风格。Java语言宣传的“一次编写&#xff0c;到处运行”的特性&#xff0c;从架构风格…...

FastBoot刷机获取root权限(Magisk)

1.首先要下载ADB、Fastboot等工具。 1.ADB、Fastboot工具 https://developer.android.com/studio/releases/platform-tools 2.安装FastBoot的USB驱动 https://developer.android.com/studio/run/oem-usb 2.下载对应的镜像 https://developers.google.com/android/images?…...

信息检索(43):SPLADE: Sparse Lexical and Expansion Model for First Stage Ranking

SPLADE: Sparse Lexical and Expansion Model for First Stage Ranking 摘要1 引言2 相关工作3 方法3.1 SparTerm3.2 SPLADE&#xff1a;稀疏词汇和扩展模型 4 实验5 结论 发布时间&#xff08;2021&#xff09; 标题&#xff1a;稀疏词汇 扩展模型 摘要 稀疏的优点&#xf…...

DockerHub 镜像加速

Docker Hub 作为目前全球最大的容器镜像仓库&#xff0c;为开发者提供了丰富的资源。Docker Hub 是目前最大的容器镜像社区&#xff0c;DokcerHub的不能使用,导致在docker下pull镜像无法下载,安装kubernetes镜像也受到影响,下面请看解决方式。 1.加速原理 Docker下载加速的原理…...

Oracle 迁移 Mysql

-- Oracle->MySQL -- 使用时改一下where条件的owner和table_name -- 字段数据类型映射时会将Oracle中的浮点NUMBER转换为decimal(65,8)定点数 -- 可以识别主键约束、非空约束&#xff0c;但无法识别外键约束、唯一约束、自定义check -- 对于Oracle字符串长度为4000的&#x…...

vue3父子组件通信

一&#xff0c;父传子——defineProps 方法&#xff1a; 在父组件的模板中使用子组件标签&#xff0c;并且给标签自定义属性和属性名&#xff0c;即通过v-bind绑定数值&#xff0c;而后传给子组件&#xff1b;子组件则通过defineProps接收使用。 父组件&#xff1a; <tem…...

CSS中使用应用在伪元素中的计数器属性counter-increment

在CSS中&#xff0c;counter-increment 是一个用于递增计数器值的属性。它通常与 counter-reset 和 content 属性一起使用&#xff0c;以在文档中的特定位置&#xff08;如列表项、标题等&#xff09;插入自动生成的数字或符号。 counter-increment 基本用法&#xff1a; 使…...

【SkiaSharp绘图08】SKPaint方法:自动换行、是否乱码、字符偏移、边界、截距、文本轮廓、测量文本

文章目录 SKPaint方法BreakText 计算指定宽度内可绘制的字符个数ContainsGlyphs字体是否包含文本字符(是否会乱码)GetGlyphOffsets 字符偏移量GetGlyphPositions 偏移坐标GetGlyphWidths 每个字符的宽度与边界GetHorizontalTextIntercepts 轮廓截距GetPositionedTextIntercepts…...

深入理解Servlet Filter及其限流实践

引言 在Java Servlet技术中&#xff0c;Filter是一个拦截器&#xff0c;它允许开发者在请求到达目标资源之前或响应发送给客户端之后&#xff0c;对请求或响应进行拦截和处理。这种机制为实现诸如身份验证、日志记录、请求修改等功能提供了极大的灵活性。 Filter基础 Filter…...

使用cv2对视频指定区域进行去噪

视频去噪其实和图象一样&#xff0c;只是需要现将视频截成图片&#xff0c;在对图片进行去噪&#xff0c;将去噪的图片在合成视频就行。可以利用cv2.imread()、imwrite()等轻松实现。 去噪步骤 1、视频逐帧读成图片 2、图片指定区域批量去噪 2、去噪后的图片写入视频 1、视频逐…...

AI在创造还是毁掉音乐?

AI对音乐产业的影响是复杂而多维的&#xff0c;既有创造性的贡献也存在潜在的挑战。我们可以从以下几个角度来分析这个问题&#xff1a; ### 创造性贡献 1. **音乐创作**&#xff1a;AI可以帮助音乐家创作新的旋律和和声&#xff0c;甚至生成完整的音乐作品。例如&#xff0c…...

【2023年全国青少年信息素养大赛智能算法挑战赛复赛真题卷】

目录 2023全国青少年信息素养大赛智能算法挑战赛初中组复赛真题 2023全国⻘少年信息素养⼤赛智能算法挑战复赛⼩学组真题 2023全国青少年信息素养大赛智能算法挑战赛初中组复赛真题 1. 修复机器人的对话词库错误 【题目描述】 基于人工智能技术的智能陪伴机器人的语言词库被…...

Android系统揭秘(一)-Activity启动流程(上)

public ActivityResult execStartActivity( Context who, IBinder contextThread, IBinder token, Activity target, Intent intent, int requestCode, Bundle options) { IApplicationThread whoThread (IApplicationThread) contextThread; … try { … int result …...

使用Java实现哈夫曼编码

前言 哈夫曼编码是一种经典的无损数据压缩算法&#xff0c;它通过赋予出现频率较高的字符较短的编码&#xff0c;出现频率较低的字符较长的编码&#xff0c;从而实现压缩效果。这篇博客将详细讲解如何使用Java实现哈夫曼编码&#xff0c;包括哈夫曼编码的原理、具体实现步骤以…...

IDEA、PyCharm等基于IntelliJ平台的IDE汉化方式

PyCharm 或者 IDEA 等编辑器是比较常用的&#xff0c;默认是英文界面&#xff0c;有些同学用着不方便&#xff0c;想要汉化版本的&#xff0c;但官方没有这个设置项&#xff0c;不过可以通过插件的方式进行设置。 方式1&#xff1a;插件安装 1、打开设置 File->Settings&a…...

visual studio 创建c++项目

目录 环境准备&#xff1a;安装 visual studiovisual studio 创建c项目Tips&#xff1a;新建cpp文件注释与取消注释代码 其他初学者使用Visual Studio开发C和C时常遇到的3个坑 环境准备&#xff1a;安装 visual studio 官网&#xff1a;https://visualstudio.microsoft.com/zh…...

MGV电源维修KUKA机器人电源模块PH2003-4840

MGV电源维修 库卡电源模块维修 机器人电源模块维修 库卡控制器维修 KUKA电源维修 库卡机器人KUKA主机维修 KUKA驱动器模块维修 机械行业维修&#xff1a;西门子系统、法那克系统、沙迪克、FIDIA、天田、阿玛达、友嘉、大宇系统&#xff1b;数控冲床、剪板机、折弯机等品牌数控…...

建筑模型网站/武汉seo网站优化排名

今天来跟大家分享一个通道指标&#xff0c;一个趋势型指标&#xff0c;供大家参考交易思路思维&#xff01;大家要明白一点就是指标一定是存在滞后性的&#xff0c;所以不要盲目的崇拜指标所谓的圣杯&#xff0c;交易市场根本就不存在圣杯&#xff01;1)顺势操盘&#xff0c;多…...

大丰区城乡和住房建设局网站/推广怎么推

http://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.html#code4xxHTTP状态码&#xff0c;我都是现查现用。 我以前记得几个常用的状态码&#xff0c;比如200&#xff0c;302&#xff0c;304&#xff0c;404&#xff0c; 503。 一般来说我也只需要了解这些常用的状态码…...

哪个素材网站免费/网站关键词优化方法

1.slice&#xff08;数组&#xff09; 用法&#xff1a;array.slice(start,end) 解释&#xff1a;该方法是对数组进行部分截取&#xff0c;并返回一个数组副本&#xff1b;参数start是截取的开始数组索引&#xff0c;end参数等于你要取的最后一个字符的位置值加上1&#xff08;…...

网站seo推广优化报价表/网络营销计划的七个步骤

这里写目录标题1.DataSource理论知识1.DataSource理论知识 什么是数据源-DataSource 简单理解为数据源头&#xff0c;提供了应用程序所需要数据的位置。数据源保证了应用程序与目标数据之间交互的规范和协议&#xff0c;它可以是数据库&#xff0c;文件系统等等。其中数据源定…...

国内使用vue做的网站/如何用手机创建网站

【先收藏&#xff0c;早晚用得到】49个Flink高频面试题系列&#xff08;二&#xff09; 持续分享有用、有价值、精选的优质大数据面试题致力于打造全网最全的大数据面试专题题库 一、Flink 相比传统的 Spark Streaming 有什么区别? 这个问题是一个非常宏观的问题&#xff0c;…...

下载软件网站/百度网站首页提交入口

十天瘦TM十斤如何在短时间内减轻体重什么样的人适合减肥减肥前的调整减肥的原理减肥7分靠吃 3分靠练如何在短时间内减轻体重 首先&#xff0c;体重的迅速变化&#xff0c;突然胖了或者突然瘦了&#xff0c;都是不正常、不健康的。因此下面介绍一种在合理范围内的减肥方法 什么…...