make/makefile的使用
make/makefile
文章目录
- make/makefile
- 初步认识makefile的工作流程
- 依赖关系和依赖方法
- make的使用
- 总结
make是一个命令,是一个解释makefile中指令的命令工具,makefile是一个文件,当前目录下的文件,两者搭配使用,完成项目自动化构建
make/makefile是Linux项目自动化构建工具,将多个源文件放在makefile中,通过make命令,通过makefile文件中的依赖关系,使得文件实现自动化编译,极大的提高了软件开发的效率。
初步认识makefile的工作流程
下面通过一段代码进行编译演示makefile的工作流程
1.认识makefile文件的内容格式要求

2.make命令

上述内容,我们通过make命令,通过makefile文件中的依赖关系实现了test可执行程序。
依赖关系和依赖方法
依赖关系为我们要实现的可执行文件是需要依赖于一些文件,通过依赖方法来实现的。只需要找到合适的依赖关系和依赖方法,我们就可以自动化编译

//1.依赖方法实际上就是实现依赖关系的语句,来得到可执行文件
test:test.c //当前目录下进行查找发现拥有test.c文件gcc -c test test.c //我们通过改gcc语句来得到test
//2.如果拥有多对依赖关系的时候,对于依赖关系的文件在该makefile所在目录下进行查找,如果没有,就查看makefile中是否有能得到该文件的依赖关系,然后一步一步的向下,直到查找到的依赖关系的文件是已存在的,可以从这一依赖关系,开始运行gcc语句,来得到对应文件来作为另一依赖关系的依赖文件1 test:test.o //test.o 文件不存在,所以向下找2 gcc -o test test.o3 test.o:test.s //得到.o需要.s文件,所以还是没法运行对应的gcc语句(依赖方法)4 gcc -c test.s -o test.o5 test.s:test.i //。。。6 gcc -S test.i -o test.s 7 test.i:test.c //最后找到了.c文件的依赖关系(.c是makefile所在目录下已有的文件所以是可以执行对应的gcc语句的)8 gcc -E test.c -o test.i
//所以从 第8行开始执行.c得到.i,现在有了.i 在由test.s:test.i关系通过gcc -S test.i -o test.s 语句来得到.s以此类推,最后得到test可执行文件
make的使用
我们创建好makefile文件之后,我们可以通过make命令来运行该文件,但是我们发现的是make只能运行一次,情况如下:

//1.为什么会这样呢?难道不可以运行make创建新的test覆盖原来的test可执行文件对于make命令来讲,这是为了提高编译效率
//2.那么是如何判断是否需要更新该test文件的呢?我们先认识一个事情:先有源文件,再通过一定的依赖方法,得到可执行程序,所以一般来讲源文件的最近的修改时间比可执行文件要老(旧)所以当我们更改源文件之后,历史上曾经还有可执行文件,那么源文件的最近修改的时间,一定是 比可执行文件要新的。我们比较的是可执行程序的最近修改时间和源文件的最近修改时间如果.exe 新于 .c源文件 那么说明源文件是老的,即不需要重新编译如果.exe 旧于 .c源文件 那么说明.c源文件在实现.exe之后被更改了,所以需要重新编译一般 .exe!=.c
对于上述内容总结,make会根据源文件和可执行程序的新旧,来判定是否需要重新执行依赖关系进行编译!!!
查看一下文件状态命令:stat 文件名

文件内容之外的就是文件属性,文件=文件内容+文件属性
下面是对于三种时间的演示:

//对于上述的内容我们知道了
//1.Access是多次访问之后才会进行改变,是为了系统性能考虑
//2.Modify是文件内容改变之后才会改变,相应的一般大小变化之后Change也会改变,所以一般Modify==Change
//3.Change是文件属性变化才会改变(权限,大小等),一般只有Change会发生变化(Access可能变)
所以对于make判断源文件和目标文件的新旧问题,我们采用的是Change的时间(因为稳定,文件发生变化,就一定会改变时间)
对于文件新旧问题演示make

如果是每次都要指定指定的依赖关系:使用.PHONY : 伪目标
.PHONY:test 表示不管如何(test.c不更改也可以)都会执行该依赖关系
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2A3ZsIRU-1689503950289)(C:\Users\红颜\AppData\Roaming\Typora\typora-user-images\image-20230716175439430.png)]](https://img-blog.csdnimg.cn/14a6522677f2495f9cbb34c70f0360d4.png)
运行展示:

make clean的使用
make clean 使得make的操作更加简便,想要删除指定可执行程序的时候,不用去rm,直接make clean即可
操作演示:


总结
make 默认实现的是makefile文件中的第一部分(模块)
make + 目标 可以实现makefile中的指定目标(部分)如make clean、make test等
make默认的文件是makefile/Makefile,如果使用其他文件进行操作,使用:make -f filename
对于依赖关系和依赖方法的认识,以及make不能连续执行,是因为目标文件已经是最新的,通过stat filename来查看指定文件的信息。更改源文件的信息就可以再次make进行编译
stat filename(文件名),以stat+文件名的形式,我们可以查看文件的基本信息之外的三种时间
分别为:
- Access:表示最近访问文件的时间
- Modify:表示最近修改文件内容的时间
- Change:表示最近修改文件属性的时间
为了linux系统的性能,Access需要多次访问该文件才能自动修改时间。
一般来讲Modify改变,文件大小改变,所以Change改变,文件属性改变,一般只有Change改变,所以我们对于是否重新编译目标文件,比较的是源文件和可执行程序的Change时间。
相关文章:
make/makefile的使用
make/makefile 文章目录 make/makefile初步认识makefile的工作流程依赖关系和依赖方法make的使用 总结 make是一个命令,是一个解释makefile中指令的命令工具,makefile是一个文件,当前目录下的文件,两者搭配使用,完成项…...
Flutter中Navigator 跳转传参数和反向传参数
初始化路由 MaterialApp(routes: <String, WidgetBuilder>{"/Second": (BuildContext context){return Second("");}}, 跳转传参数 String va await Navigator.of(context).push(MaterialPageRoute(builder: (content) {return Second( demo); },…...
kettle开发-Day40-AI分流之case/switch
前言: 前面我们讲到了很多关于数据流的AI方面的介绍,包括自定义组件和算力提升这块的,今天我们来学习一个关于kettle数据分流处理非常重要的组件Switch / Case 。当我们的数据来源于类似日志、csv文件等半结构化数据时,我们需要在…...
MySQL下载与安装
MySQL下载与安装 一、下载 地址:https://dev.mysql.com/downloads/mysql/ 当前最新是8.0版本,我选择上一个最新的mysql-5.7.24-winx64.zip 二、安装 MySQL安装文件分两种 .msi和.zip ,.msi需要安装 zip格式是自己解压,解压缩之后…...
c++基础2
文件操作 程序运行时产生的数据属于临时数据,程序一旦运行结束都会被释放 通过文件可以将数据持久化 c中对文件操作需要包含 文件类型分为两种 文本文件:文件以ASCII码形式存储在计算机中二进制文件:文件以文本的二进制存储在计算机中&a…...
虚拟机VMware,linux,centos,如何将项目部署到服务器上面
vmware 是安装虚拟机的软件,centos是系统,linux是系统内核 将本地项目上线到服务器上面,如何实现呢? 准备好服务器,可以选择阿里云服务器 首先需要搭建环境,运行的主要环境是jdktomcatmysql; 通过远程连接…...
R语言 BPNN 反向传播神经网络
##BPNN-neuronet set.seed(123) folds <- createFolds(y=data$Groups,k=10) 建一个放auc值的空向量 auc<-as.numeric() Errorrate<-as.numeric() accuracy<-as.numeric() sensitivity<-as.numeric() specificity<-as.numeric() roc <- vector("li…...
回归预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元多输入单输出回归预测
回归预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 