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

Linux项目自动化构建工具-make/makefile 介绍及使用

使用背景

在工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义一系列
规则来指定什么文件需要先编译,什么文件需要后编译,哪些文件需要重新编译,或者更复杂
的功能操作
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编
译,提高效率
make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE也都有这个命
令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。
而 make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

make/makefile的原理及简单例子

make 会在当前目录下找名字叫“Makefile”或“makefile”的文件。 如果找到,它会找文件中的第一个目标文件,并把这个文件作为最终的目标文件。
那我们来举个例子
以图片内的代码为例
将myfile.c文件内写好代码
在这里插入图片描述
先创建Makefile文件,这里makefile和Makefile都可以
在这里插入图片描述

在Makefile中写入如下代码,那么我们就会问 myfile:myfile.c是什么意思?
myfile与myfile.c为依赖关系
而下面 gcc -o myfile myfile.c为依赖方法,我们解释下,我们想形成myfile可执行那么我们要依赖myfile.c文件,如何依赖就需要依赖方法来将myfile与myfile.c进行相关操作。也就是需要依赖关系依赖方法来形成可执行程序。

在这里插入图片描述
然后我们make以下就形成了myfile可执行程序,图中绿字可见。在./myfile 形成 。屏幕上打印处hello
在这里插入图片描述

那么在工程中有些是需要进行清理的,如果每次都手动清理第一是不方便,第二也有可能误操作,因此我们可以在Makefile中添加清理的操作。而清理需要总需要被执行的,因此用**.PHONY来修饰。下面对.PHONY**有相关解释
在这里插入图片描述

可以看到在输入make clean命令后执行了 rm -f myfile的命令查看结果myfile被清理掉了。
在这里插入图片描述
注意:
在写依赖方法时前面需要TAB一下空格
在这里插入图片描述

.PHONY

.PHONY来修饰clean,而**.PHONY的作用为设置为伪目标,伪目标的特性是总是被执行的。
为了方便大家理解我们来看这个例子
在这里插入图片描述
图中我们多次
make**,但是除了第一次形成可执行外第二次三次都没形成可执行,这样为不是总是被执行,如果我们将myfile设置成总是被执行,是否可以多次形成。
在这里插入图片描述
在设置给myfile设置**.PHONY后,可以看到make可以多次形成
在这里插入图片描述
一般自己形成的可执行不用
.PHONY**去修饰,大量代码的编译需要大量时间, make在执行makefile规则中,根据语法规则,会分析目标对象与依赖对象的时间信息,判断是否在上一次生成后,源文件发生了修改,修改后的源文件比可执行的时间要晚,make判断发生了修改需要重新生成,因此一般只需要让修改过后的重新编。在这里插入代码片

http://www.lryc.cn/news/43287.html

相关文章:

  • 【云原生|Docker】06-dokcerfile详解
  • 【SCL】博图——先入先出排序法
  • OSPF----特殊区域
  • JVM-类加载
  • 超详细讲解C语言文件操作!!
  • linxu学习之进程
  • 蓝桥杯真题2
  • PWM互补输出,以及死区时间计算
  • 基于深度学习的海洋动物检测系统(Python+YOLOv5+清新界面)
  • C# 计算方差
  • HJZS电源监视继电器HJZS-E202 AC220V
  • dolphinscheduler 2.0.6 资源中心改造方案二:通过NFS挂载共享目录
  • 基于集成学习的用户流失预测并利用shap进行特征解释
  • 【Java版oj 】 day17杨辉三角形的变形、计算某字符出现次数
  • 智能驾驶芯片赛道混战:如何看待5类玩家的竞争格局?
  • vue antd table表格的增删改查(三)input输入框根据关键字模糊查询【后台管理系统 使用filter与indexOf嵌套】
  • 【计组】性能指标——速度
  • 【PC自动化测试-4】inspect.exe 详解
  • 比肩ChatGPT的国产AI:文心一言——有话说
  • 【第13届蓝桥杯】C/C++组B组省赛题目+详解
  • STM32 KEI 调试新手注意事项
  • Windows权限提升—令牌窃取、UAC提权、进程注入等提权
  • 不做孔乙己也不做骆驼祥子
  • ChatGPT原理解析
  • 常用算法实现【必会】:sort/bfs/dfs
  • 瑟瑟发抖吧——用了这款软件,我的开发效率提升了50%
  • 笔记本只使用Linux是什么体验?
  • pipeline业务发布
  • 【巨人的肩膀】JAVA面试总结(七)
  • Python满屏表白代码