Linux——自动化建构make/makefile

目录

背景

make/makefile

简单见一下makefile/make

学习使用make/makefile

make/makefile的原理

理解make/makefile

拓展

文件新旧

项目清理

另一种语法


背景

  • 一个工程中的源文件不计其数,按其类型,功能,模版分别放在若干个目录里,makefile定义了一系列的规则来指定哪些文件需要需要先编译,哪些文件需要后编译......
  • makefile带来的好处就是------自动化编译,一旦写好,只需要一个make命令,整个工程完全自动编译,极大提高了软件开发的效率。
  • make是一个命令工具,是一个能解释makefile指令的命令工具。
  • make是一条命令,makefile是一个文件。

make/makefile

简单见一下makefile/make

makefile

make

学习使用make/makefile

  1. 我们要先创建一个文件,文件名字必须是makefile/Makefile
  2. 使用vim在文件里添加代码
  3. 退出,使用make命令

通过这个例子可以让我们更好的理解make/makefile的原理

从中我们可以看出,虽然在文件中我们先写的是test1001.exe:test1001.o这个依赖关系,但是先实现的却是test.1001.i:test1001.c这个依赖关系。这就要讲到make/makefile的原理了。

make/makefile的原理

当我们输入make命令时,

  1. 首先,make命令会在当前目录下找名字叫makefile/Makefile的文件
  2. 找到后,他会把文件中的第一个目标文件当做最终目标
  3. 比如:如果test1001.exe所依赖的test1001.o不存在,就会找当前文件中目标文件为test1001.o的依赖文件,就这样层层递推,直到最终编译出第一个目标文件。

理解make/makefile

依赖关系:比如你与你爸爸的关系,test1001.exe这个目标文件的形成需要依赖test1001.c.

依赖方法:假设你需要生活费,你向你爸要生活费就是你得到钱的方法~ 同样,得到目标文件的方法就是使用gcc生成。

拓展

文件新旧

当我们再次使用make命令的时候,会发现

那么make和makefile是怎么知道生成的文件是不是最新的呢?

判断文件的新旧,我们可以根据文件的modify时间来判断。

使用stat 文件名命令可以查看文件的信息。

  • 在我们更改文件的内容的时候,往往modify和change会发生联动变化,因为内容修改可能会影响文件属性的大小。
  • 当我们meiciqufangwen一个文件时,该文件的access时间可能不会改变,取决于linux系统自己的评判标准。因为对于经常查看的文件,如果每次都要更新数据,数据会刷新到磁盘,会增加访问磁盘的次数,磁盘是外设,效率比较低下,操作系统的整体效率就会降低。

当我们使用touch命令时,这三个时间就会更新。

项目清理

我们最终是为了生成.exe文件,.i,.o,.s文件都是不重要的,那么我们是不是需要清理一下呢?清理也是可以通过make/makefile实现自动化构建的。

如果不加上.PHONY的话,clean默认是不会执行的,因为它跟第一个目标文件没有直接或者间接关系,所以后面定义的命令不会被自动执行。

但是用了.PHONY后可以被执行,因为.PHONY的特性是总是被执行的。

不过,我们却不将原文件设成伪目标。因为这样的话,每次make执行编译时都会将所有文件,即使是没有改变的也编译一遍。

另一种语法

在这里,**@** 代表目标文件,**^**代表依赖文件。

也可以用"自定义的形式"。

相关推荐
H_oRIZoN_30 分钟前
Linux入门DAY41(51 单片机 串口与通信协议)
linux·运维·单片机
小马同学-2 小时前
OpenStack 使用实战:Web 界面与 CLI 命令行实验
运维·云计算·openstack
GeW2 小时前
RHCE备考别瞎学!按这个计划走,30天提高通过率,快速拿证
linux
Escalating_xu2 小时前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm
傲世仙尊2 小时前
System V 进程间通信详解:共享内存、消息队列与信号量(CSDN博客)
linux·开发语言·c++
码农小韩3 小时前
Linux应用开发(六)——进程间通信
linux·linux驱动·嵌入式软件开发·嵌入式操作系统·linux应用
网安老伯3 小时前
都2026年了,还在问网络安全怎么入门?看完这一篇你就懂了
运维·计算机网络·web安全·网络安全·wireshark·密码学·网络攻击模型
www.023 小时前
Codex额度用完怎么办?Windows定时自动继续VS Code Codex任务实战
人工智能·windows·vscode·自动化·openai·codex·autohotkey
星禾元亨3 小时前
生成式 AI 时代的架构演进与 GEO 优化:实体企业 AI 落地避坑指南
大数据·人工智能·架构·自动化·创业创新
小祺先生3 小时前
mt7921 debian系统 如何安装驱动
运维·网络·debian