我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Linux自动化构建工具make和Makefile详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Linux自动化构建工具make和Makefile详解

目录
  • 一、make和Makefile的作用
  • 二、make和Makefile的使用
  • 清理

一、make和Makefile的作用

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

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

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命 令,比如:Delphi的make,Visual C++的nmake,linux下GNU的make。可见,makefile都成为了一 种在工程方面的编译方法。 make是一条命令,makefile是一个文件,两个搭配使用,就可以完成项目自动化构建。

二、make和Makefile的使用

在了解依赖关系和依赖方法之前,我们来写一个C语言的小程序。

在这里插入图片描述

我们创建了一个make.c的文件,并写上了一句hello make的代码。

那么我们再创建一个Makefile文件(makefile也可以,但不建议)。

然后我们编辑Makefile文件并写上如下代码:

在这里插入图片描述

然后我们保存退出。

然后我们可以执行make命令。如果提示make不存在,则是因为没有安装,可以切换至root身份安装。安装代码:yum install make 或者 sudo install make

正常执行make后会出现如下显示。

在这里插入图片描述

然后我们ll来查看当前目录下的文件。

我们可以发现多了一个可执行程序make。那我们运行用 ./make 运行试试。

在这里插入图片描述

我们会发现这个可执行程序输出make。

这就是我们的自动化构建工具,只需要在Makefile里面配置一下。往后直接输入make即可编译代码。那我们再输入一次make试试。

在这里插入图片描述

提示我们 make程序是最新的。 也就是说,如果你没有修改或者更新程序的话。 那么则不会为你编译,因为你程序都没动呀,编译它干嘛。

那么此时我们回过来分析一下 Makefile里面写的代码。

在这里插入图片描述

首先我们把它分为三部分

make

make.c

gcc make.c -o make -std=c99

这三者的关系就是, make 是依赖于 make.c 产生的。 它们两者有依赖关系 , 而gcc make.c -o make -std=c99则是 make 依赖于 make.c的方法,叫依赖方法

什么是依赖关系和依赖方法?

打个比方。

月底了,你的生活费用光了。 这个时候你给你爸爸打电话,和他说:“爸,月底了。我没钱了。"。此时你的爸爸就知道了,会给你打生活费。 这里面,你和你的父亲是父子关系,所以你依赖于你的父亲,你们之间有依赖关系。而你的父亲给你生活费,这是你依赖父亲的一种方式,所以这就是依赖方法。如果此时你给你室友的父亲打电话要生活费,他会直接让你滚。因为你们根本不构成依赖关系,不构成依赖关系就没有依赖方法。

在这里插入图片描述

所以我的程序也是一样的。 make 是生成的可执行程序。 而它依赖于make.c,因为它是从 make.c编译来的。而依赖方法则是 执行 gcc make.c -o make -std=c99 这条命令。

依赖关系的原理

  • make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
  • 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“hello”这个文件, 并把这个文件作为最终的目标文件。
  • 如果hello文件不存在,或是hello所依赖的后面的test.o文件的文件修改时间要比test这个文件新(可 以用 touch 测试),那么,他就会执行后面所定义的命令来生成test这个文件。
  • 如果test所依赖的test.o文件不存在,那么make会在当前文件中找目标为test.o文件的依赖性,如果 找到则再根据那一个规则生成test.o文件。(这有点像一个堆栈的过程)
  • 当然,你的C文件和H文件是存在的啦,于是make会生成 test.o 文件,然后再用 test.o 文件声明 make的终极任务,也就是执行文件test了。
  • 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文 件。
  • 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错, 而对于所定义的命令的错误,或是编译不成功,make根本不理。
  • make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起, 我就不工作啦。

清理

我们平时在写代码的时候,经常会需要反复编译,执行代码。

而在下一次重新编译之前,需要清理一下上次生成的可执行程序。但是清理的时候可能清理错误,不小心把源文件删了,这时又造成了问题。

那么我们有没有方法解决呢?答案是当然有。

我们继续编辑Makefile文件。

在这里插入图片描述

我们在原有的基础上加上了

.PHONY:clean

clean:

​	rm -f make 

那么.PHONY有什么作用呢?

.PHONY修饰的是一个伪目标的,伪目标总是被执行的。clean是自己定义的一条make指令,使用方法为 make clean

那我们来试试吧这条指令

在这里插入图片描述

我们可以看到它被清理了,那为什么说伪目标它总是被执行的呢?我们多次执行它看看。

在这里插入图片描述

我们可以一直执行它,那么我们多次执行make呢?

在这里插入图片描述

我们会发现,make执行了一次,就无法执行了,因为没有被.PHONY修饰。那么我用.PHONY修饰它再试试。

在这里插入图片描述

然后我们保存退出,多次执行make

在这里插入图片描述

我们就可以看到它被多次执行了。但我觉得没有这个必要,因为文件没有被修改的话。重新编译没有意义,所以自动化编译不建议加上.PHONY

我们保存退出,多次执行make

在这里插入图片描述

我们就可以看到它被多次执行了。但我觉得没有这个必要,因为文件没有被修改的话。重新编译没有意义,所以自动化编译不建议加上.PHONY

以上就是Linux自动化构建工具make和Makefile详解的详细内容,更多关于Linux自动化构建工具的资料请关注我们其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Linux自动化构建工具make和Makefile详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Linux自动化构建工具make和Makefile详解

目录一、make和Makefile的作用二、make和Makefile的使用清理一、make和Makefile的作用 在一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的 规则来指定,哪些文件
2023-04-19

Linux 自动化构建工具make/Makefile的使用详解

目录一、单个文件的编译1、写法一:逐个生成.i、.s、.o文件,最后再生成 test执行文件2、 写法二:一步到位,直接通过 test.c 生成 test 执行文件(推荐)3、 Makefile自动清理二、多个文件的编译(同一目录下
2022-06-05

Linux自动化构建工具make和Makefile如何使用

这篇文章主要介绍“Linux自动化构建工具make和Makefile如何使用”,在日常操作中,相信很多人在Linux自动化构建工具make和Makefile如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
2023-05-25

Linux自动化构建工具make和Makefile怎么使用

这篇文章主要讲解了“Linux自动化构建工具make和Makefile怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux自动化构建工具make和Makefile怎么使用”吧!一
2023-07-06

Linux自动化构建工具Makefile与make怎么用

这篇文章主要介绍“Linux自动化构建工具Makefile与make怎么用”,在日常操作中,相信很多人在Linux自动化构建工具Makefile与make怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”L
2023-06-28

golang函数的自动化测试工具详解

自动化测试工具是用于简化和加速 golang 函数测试的工具。常用工具包括:go test:golang 内置框架testify/assert:提供断言和辅助函数ginkgo/gomega:用于行为驱动开发GoLang 函数的自动化测试工具
golang函数的自动化测试工具详解
2024-04-27

PHP CI/CD 与自动化部署中构建和部署工具的使用

php ci/cd 中构建和部署工具的使用有助于提升开发和部署效率,主要使用以下工具:构建工具:docker(构建一致的环境)、composer(管理依赖项)部署工具:jenkins(功能强大的 ci/cd 服务器)、deployer(轻量
PHP CI/CD 与自动化部署中构建和部署工具的使用
2024-05-09

python开发的自动化运维工具ansible详解

目录ansible 简介ansible 是什么?ansible 特点ansible 架构图ansible 任务执行ansible 任务执行模式ansible 执行流程ansible 命令执行过程ansible 配置详解ansible 安装方
2022-06-02

怎么使用Jenkins自动化构建工具进行敏捷开发

这篇“怎么使用Jenkins自动化构建工具进行敏捷开发”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用Jenkins自
2023-06-29

Linux下自动化工具 cron jobs 的使用方法解析

Cron jobs的简单使用 cron jobs 可以将任何的工作设定为定期自动化执行,如工作日志、备份、密码查核、硬盘空间查核等等, 设定且利用这些自动化的工作可以大幅降低系统管理者的日常工作,这些工作通常可以设定在半夜执行以避免在系统尖
2022-06-03

在Mac OS上安装使用Node.js的项目自动化构建工具Gulp

安装 node.js 首先需要安装 node.js, 通常情况下,只需要到 Node.js 官网下载安装包安装就可以了。不过我可耻的失败了,弹出了如下错误:于是我换成了 brew 大法:brew install nodejs安装 Gulp
2022-06-04

linux 系统进程管理工具systemd详解(systemctl命令、创建自己的systemd服务)

目录linux systemd什么是 systemdsystemd 特点unit(单元)systemd unit目录Unit 和 TargetUnit 文件结构Linux命令——systemctl参考linux sy
2022-12-12

linux 系统进程管理工具systemd详解(systemctl命令、创建自己的systemd服务)

Unit 是 Systemd 管理系统资源的基本单元,可以认为每个系统资源就是一个 Unit,并使用一个 Unit 文件定义,这篇文章主要介绍了linux 系统进程管理工具systemd详解(systemctl命令、创建自己的systemd服务),需要的朋友可以参考下
2022-12-12

大型企业中如何批量管理千万台服务器之ansible自动化运维工具详解 [⭐建议收藏⭐]

文章目录 ansible 自动化运维工具 详解关于作者作者介绍一、ansible 概述1.1 ansible 概述1.2 是什么要使用 ansible1.3 ansible 功能1.4 ansible 优点1.5 ansible工作
2023-08-30

编程热搜

目录