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

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.kler.cn/a/3918.html

相关文章:

  • 1166 Summit (25)
  • git操作
  • Amazon MSK 开启 Public 访问 SASL 配置的方法
  • JetPack——databing
  • 如何使用C#与SQL Server数据库进行交互
  • 【Python】随机数种子(random seed)的设置
  • 【RV1126】调试GT911,1024x600 7寸 MIPI 电容触摸屏
  • 在 Python 中将字符串转换为集合
  • Vector - CAPL - 实时时间on *(续2)
  • 程序员面试攻略:面试中的技巧(付费资料)
  • 淘宝天猫价格监控接入方案
  • 面试热点题:回溯算法 递增子序列与全排列 II
  • 【chatgpt】点云转图片后圆特征检测
  • Linux系统之安装PostgreSQL数据库
  • 我的第一台电脑的故事
  • 亚马逊、eBay、速卖通等跨境电商自养号测评,你知道多少?
  • CCF-CSP认证 202303 500分题解
  • java八股文--数据库
  • C/C++ 中的内存对齐
  • Java20的新特性
  • 蓝桥杯刷题第二十三天
  • 第十四届蓝桥杯三月真题刷题训练——第 24 天
  • vue 项目中使用高德地图
  • Kotlin语法-Day6
  • 一款全新的基于GPT4的Python神器,关键还免费
  • ython和PyTorch实现ChatGPT批量AI智能写作