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

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

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

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

这篇文章主要介绍“Linux自动化构建工具Makefile与make怎么用”,在日常操作中,相信很多人在Linux自动化构建工具Makefile与make怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux自动化构建工具Makefile与make怎么用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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

Makefile

Makefile是一个文本文件,记录一个项目的构建规则流程。在工作中会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力,同时一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,其带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编
译,极大的提高了软件开发的效率。

make

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

工作原理

在Makefile中会形成各个文件之间的依赖关系,比如一个code.exe是在code.o 的基础上通过链接生成的,而code.o是在code.s的基础上通过汇编形成的,code.s是在code.i的基础上通过编译生成,code.i是在code.c的基础上预处理完成之后生成,如此层层寻找源头。其规则使用倒叙的方法,将第一个文件视作最后完后的文件,若当前文件未生成则通过依赖关系以及相互生成的方法进行层层推进,最终完成全部文件的形成。
依赖关系

A:B   A是依赖于B

依赖方法

gcc 选项 + B -o +A   A是B经过处理生成的文件

项目清理

工程是需要被清理的,像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编译。但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被
执行的。

原理

make会在当前目录下找名字叫“Makefile”或“makefile”的文件。

如果找到,它会找文件中内容中的第一个文件,并把这个文件作为最终的目标文件。

如果该文件当前不存在,或是该文件的依赖文件的修改时间要比当前这个文件要新,那么,他就会执行后面所定义的命令来生成当前文件。

如果该文件的依赖文件不存在,那么便对这个依赖文件进行如同第2,3步的步骤,知道找到最后的源文件为止

当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件声明make的终极任务,也就是执行文件了。

这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。

在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。

make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。

make 每次在Makefile中只会找到第一个目标对象进行生成,生成之后就会退出(不会生成第二个对象)

.PHONY: clean

clear:

  rm -rf $(obj)

【补充】

预定义变量的使用:[$@ ]、[ $^]、[ $<],可以用以上三个对文件名进行替换

$@ :表示目标对象

$^:表示所有依赖对象

&<:表示依赖对象的第一个

$ (wildcard ./.c)获取当前目录下所有的以.c结尾的文件的文件名称【例】 class="lazy" data-src=$(wildcard ./.c)   code: $ (str)

$ (patsubst %.c, %.o,$(str))表示将str变量中的.c文件替换成.o,然后存放在obj变量中。

伪对象:声明一个目标对象与外部文件无关,表示每次对这个对象不管是否最新都要重新生成,且不管外部是否能够存在,都要每次无论如何都执行语句[.PHONY:]

程序的编译过程:一般包含预处理、编译、汇编、链接,但是在实际项目构建中整体分为两步,即编译和链接。这样的好处在于,如果只是修改了一个.c文件,对于之前的直接对所有.c进行编译生成可执行程序的过程来说,需要重新编译所有的.c生成可执行程序,这样的效率非常低下,因此分为两步进行操作,先把每个.c都是生成自己的.o,然后再将所有的.o链接在一起,一旦一个.c发生改变只需要对这一个.c进行生成.o之后,替换程序中的指定模块就可以。

例1. 创建一个一般的Makefile

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

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

例2. 使用预定义编写的Makefile

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

到此,关于“Linux自动化构建工具Makefile与make怎么用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

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

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

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

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

下载Word文档

猜你喜欢

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Linux下怎么使用Jenkins自动化构建.NET Core应用

本篇内容主要讲解“Linux下怎么使用Jenkins自动化构建.NET Core应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下怎么使用Jenkins自动化构建.NET Core应
2023-06-29

自动化运维工具ansible怎么用

自动化运维工具ansible怎么用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。正文回到顶部Ansible playbook 简介  playbook 是 an
2023-06-06

怎么使用Python自动化工具Fabric

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

自动化构建系统CMake怎么用

这篇文章主要为大家展示了“自动化构建系统CMake怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“自动化构建系统CMake怎么用”这篇文章吧。CMake 是一个跨平台的自动化构建系统,它使用
2023-06-27

怎么使用IOS自动化测试工具UIAutomation

这篇文章给大家分享的是有关怎么使用IOS自动化测试工具UIAutomation的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。xcode中自带的Instuments工具可以用来进行APP的自动化测试, 以及用于进行
2023-06-14

Python任务自动化工具Tox怎么使用

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

python中Airtest自动化测试工具怎么用

小编给大家分享一下python中Airtest自动化测试工具怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Airtest的官网介绍项目构成Airtest:是
2023-06-29

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

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

怎么使用Jenkins搭建PHP的自动化构建环境

本篇内容介绍了“怎么使用Jenkins搭建PHP的自动化构建环境”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是Jenkins?Jenk
2023-07-05

element怎么用脚本自动化构建新组件

这篇文章主要为大家展示了“element怎么用脚本自动化构建新组件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“element怎么用脚本自动化构建新组件”这篇文章吧。element-ui的自动化
2023-06-22

编程热搜

目录