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

Linux自动化构建项目工具——Makefile/makefile

目录

一,背景知识

二,makefile/Makefile的编写

1.创建makefile/Makefile文件

 2.在Makefile文件里写编译代码

3.伪目标——.PHONY

1.伪目标的特点

 2.怎样实现总是被执行

4.Makefile/makefile文件的不同编写风格

1.背景知识

2.改写


一,背景知识

首先我们要分清楚的便是这两个东西的本质区别。我们要明确的便是:

1.make是一个命令

2.makefile/Makefile是一个具有特定格式的文本文件。

在Linux下一个程序员是否会使用Makefile/makefile决定了这个程序员是否具备构建大项目的能力。

二,makefile/Makefile的编写

1.创建makefile/Makefile文件

在想要使用这个工具来达到我们的目的时首先便要创建一个文本文件。这个文本文件只能叫做makefile/Makefile。若是文件名字错了这个工具便是不能被使用的。创建文件:

一般在使用这个工具时创建的是Makefile。

 2.在Makefile文件里写编译代码

1.准备工作:在往Makefile文件里写指令时首先便要写的便是依赖关系。这个依赖关系指的便是源文件与目标文件的关系。目标文件的生成靠的就是源文件。所以我们要先写一个源文件。

所以我们首先写一个源文件并在里面写上一些代码:

接下来便是写Makefile文件的内容了,代码如下:

在这个代码里面这几条代码的对应关系如下:

当我们运行时使用一个make便可以编译文件text.c:

当要清除这个文件时便要用到指令make clean:

在这里如果你想不想要显示make与make clean下面的指令的话便可以在指令前面加上一个@:

之后使用make与make clean指令时便是这样的:

3.伪目标——.PHONY

1.伪目标的特点

1.首先我们要知道的便是伪目标是没有依赖关系的,所以前面的clean是这样子写的:

2.伪目标文件是总是被执行的。比如我的make指令在创建完了一个目标文件后若再次想重新编译便会出现这样的情况:

但是伪目标clean便可以多次执行而不会报错:

 2.怎样实现总是被执行

.PHONY:实现总是被执行的的操作的方法便是不管文件是否修改都要访问磁盘。

这里的修改包括属性修改与内容修改。那我们怎么判断文件是否被修改呢?答案便是通过文件的修改时间判断文件新旧然后判断是否被修改。这里的时间便是ACM时间。可以用指令stat+文件名查看:

这ACM时间便对应的是Access ,Modify,Change时间。在这里Modify时间表示的是文内容被修改的时间,Change表示文件属性被修改的时间。在这些时间里只有Modify时间是牵一发而动全身的,Access时间有可能访问好几次都不变,Change时间就比较随意了。

4.Makefile/makefile文件的不同编写风格

1.背景知识

1.在Makefile文件下可以定义变量名。

2.在Linux下$()有解释括号呢放入的变量内容的作用。

2.改写

在知道上面的两个特性以后便可以将Makefile文件的代码改为如下代码:

解释:

在这里再补充一点,$@可以表示冒号左边的变量,$^可以表示冒号右边的变量,所以这个代码又可以改写成为如下版本:

下面的是不能改的,因为clean的冒号两边没有文件。

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

相关文章:

  • 第11章 字符串和字符串函数
  • TypeScript项目配置
  • 【Spring面试】二、BeanFactory与IoC容器的加载
  • Android嵌套事务
  • 如何让项目准时上线?
  • ChatGPT 和 Elasticsearch:APM 工具、性能和成本分析
  • 不使用辅助变量的前提下实现两个变量的交换
  • SV-DJS-i13电梯对讲网关
  • 论文解析-基因序列编码算法DeepSEA
  • 计组与操作系统
  • Pytorch中张量矩阵乘法函数(mm, bmm, matmul)使用说明,含高维张量实例及运行结果
  • 如何在matlab绘图的标题中添加变量?变量的格式化字符串输出浅析
  • Spring MVC 八 - 内置过滤器
  • @Change监听事件与vue监听属性:watch的区别?
  • C++面试记录之中望软件
  • 多功能翻译工具:全球翻译、润色和摘要生成 | 开源日报 0914
  • 在 Vue.js 中,使用 watch 监听data变量如:对象属性/data变量
  • vue中预览xml并高亮显示
  • MFC中嵌入显示opencv窗口
  • 金鸣识别网页版:轻松实现表格识别的神器
  • DasViewer可以设置打开指定文件吗?
  • uniapp微信小程序用户隐私保护指引弹窗组件
  • Java的反射应用(Method和Class)
  • Java之泛型系列--Class使用泛型的方法(有示例)
  • 【【无用的知识之串口学习】】
  • 9月13日上课内容 第三章 ELK日志分析系统
  • 不知道有用没用的Api
  • (2023,LENS 视觉模型 LLM)迈向可见的语言模型:通过自然语言的镜头来看计算机视觉
  • 线段树上树剖再拿线段树维护:0914T4
  • 互联网医院系统|互联网医院探索未来医疗的新蓝海