Linux---(六)自动化构建工具 make/Makefile

简介: Linux---(六)自动化构建工具 make/Makefile



一、make/Makefile

make是一个命令。

Makefile是一个在当前目录下存在的一个具有特定格式的文本文件。

🎗️会不会写Makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。

🎗️一个工程中的源文件数不胜数,其按照类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。

🎗️Makefile带来的好处就是自动化编译。一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

🎗️make是一个命令,是一个解释Makefile中指令的命令工具。一般来说,大多数的IDE都有这个命令,可见,Makefile都成为了一种在工程方面的编译方法。

🎗️make是一个命令,Makefile是一个文件,两个项目搭配使用,完成项目自动化构建。

二、快速查看

(1)建立Makefile文件

🎗️命令:

touch Makefile

(2)编辑Makefile文件

🎗️命令:

vim Makefile

(3)解释

🎗️make 会在当前的Makefile中扫描文件,找到源文件,执行目标文件形成时所对应的方法。

🎗️现实中,依赖关系+依赖方法=描述清楚一件事情的原因和做法,能达到我们的目标。

比如说,依赖关系是老爸,我是你儿子;依赖方法是给我打钱。

(4)效果展示

三、背后的基本知识、原理

(1)如何清理对应的临时文件呢?包括可执行。

🎗️代码

🎗️解读:

注意:

目标文件(包括伪目标)可以没有依赖关系。

🎗️清理项目的代码

make clean

(2)单独、反复make发现的现象

1.单独make默认从上到下扫描Makefile时,形成从上到下遇到的第一个伪目标文件。一般,清理工作写在最后。

2.不能对同一个文件重复make,因为Makefile默认在编译代码时能够自动识别出文件的新旧。

🎗️用PHONY修饰的目标文件,其实和正常的一般的文件无差别。

🎗️PHONY核心特点:总是被执行的

在一些特殊情况下,比如文件刚被编译过且没修改里面的内容,在make该文件时,第一次会被执行,后面再进行make就不执行该文件的依赖方法了。但是加上PHONY,它每make一次,就会被执行一次。

(3)为什么我们在编译的时候,make和Makefile总是不让重新编译我们的代码?

提高编译效率(如果有成千上万个文件中,里面只有几个文件被修改,那么重新编译这几个就可以了,没有更改的文件不需要编译)

(4)make和Makefile是怎么做到识别新旧文件的?

🎗️对比源文件的修改时间和可执行文件的修改时间

(5)文件的ACM时间

stat命令查看文件属性

用法:stat 文件名

什么是ACM时间

文件=内容+属性

文件的一切时间与内容、属性有关

🎗️Access时间:该文件的最近访问时间(例如:cat、vim、cd目录…)

🎗️Modify时间:对文件内容的最近修改时间

🎗️Change时间:对文件属性的最近修改时间

Change时间可能更改,就自己更改一下。

Modify时间可能更改,会和Change时间或者其他时间联动更改。

观察ACM时间的变化

🎗️Access的时间被更改为当前时间

在实际操作中,发现Change的时间也被更改,原因是Access时间也是文件的属性,发生变化时,Change时间也变化。

touch -a code.c

🎗️Modify时间被更改为当前时间

同时该操作也会伴随着Change时间变化

touch -m code.c

直接更新Modify时间,再make,什么现象?

直接更新Modify时间,是源文件的修改时间>可执行文件的修改时间,再make一下,就可被重新编译,形成一个新的可执行文件!

(6)结论:

🎗️1.通过时间对比,可以做到不让有些代码进行重编译

🎗️2.伪目标总是被执行的!他的依赖方法总是会被执行,不会被任何情况拦截。

(7)make、Makefile是具有依赖性的推导能力的

四、Makefile语法补充细节

(1)make时不回显命令的具体执行过程:

🎗️在Makefile文件中具体的操作命令前加@

(2)Makefile中依赖方法有多个时,利用回车键

(3)Makefile中注释用#

(4)Makefile是支持变量替换的

(5)Makefile支持依赖关系的简写

🎗️Makefile文件:

🎗️执行结果:

(6)常规用法(期待我们写出的格式)


以上内容就分享到这里啦!如果对友友们有帮助的话,记得点赞收藏博客,关注后续的内容创作哦

相关文章
|
2天前
|
Linux Shell C语言
Linux:自动化构建 - make
Linux:自动化构建 - make
10 1
|
5天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
23 5
|
5天前
|
安全 Linux Python
Volatility3内存取证工具安装及入门在Linux下的安装教程
Volatility3内存取证工具安装及入门在Linux下的安装教程
Volatility3内存取证工具安装及入门在Linux下的安装教程
|
5天前
|
数据可视化 小程序 Linux
【Linux】自动化构建工具make/Makefile和git介绍
【Linux】自动化构建工具make/Makefile和git介绍
13 0
|
6天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
14 3
|
7天前
|
缓存 Linux
linux性能分析之内存分析(free,vmstat,top,ps,pmap等工具使用介绍)
这些工具可以帮助你监视系统的内存使用情况、识别内存泄漏、找到高内存消耗的进程等。根据具体的问题和需求,你可以选择使用其中一个或多个工具来进行内存性能分析。注意,内存分析通常需要综合考虑多个指标和工具的输出,以便更好地理解系统的行为并采取相应的优化措施。
27 6
|
1月前
|
数据采集 存储 API
网络爬虫与数据采集:使用Python自动化获取网页数据
【4月更文挑战第12天】本文介绍了Python网络爬虫的基础知识,包括网络爬虫概念(请求网页、解析、存储数据和处理异常)和Python常用的爬虫库requests(发送HTTP请求)与BeautifulSoup(解析HTML)。通过基本流程示例展示了如何导入库、发送请求、解析网页、提取数据、存储数据及处理异常。还提到了Python爬虫的实际应用,如获取新闻数据和商品信息。
|
2月前
|
数据采集 机器学习/深度学习 算法框架/工具
利用Python实现基于图像识别的自动化数据采集系统
本文介绍了如何利用Python编程语言结合图像识别技术,构建一个自动化的数据采集系统。通过分析图像内容,实现对特定信息的提取和识别,并将其转化为结构化数据,从而实现高效、准确地采集需要的信息。本文将详细讨论系统的设计思路、技术实现以及应用场景。
|
2月前
|
Web App开发 Python
在ModelScope中,你可以使用Python的浏览器自动化库
在ModelScope中,你可以使用Python的浏览器自动化库
18 2
|
1天前
|
JSON 监控 调度
局域网管理软件的自动化任务调度:Python 中的 APScheduler 库的应用
使用 Python 的 APScheduler 库可简化局域网管理中的自动化任务调度。APScheduler 是一个轻量级定时任务调度库,支持多种触发方式如间隔、时间、日期和 Cron 表达式。示例代码展示了如何创建每 10 秒执行一次的定时任务。在局域网管理场景中,可以利用 APScheduler 定期监控设备状态,当设备离线时自动提交数据到网站,提升管理效率。
10 0

热门文章

最新文章