Linux项目自动化构建工具---make/Makefile

news2024/10/7 16:24:41

顾得泉:个人主页

个人专栏:《Linux操作系统》  《C/C++》

坚持才是硬道理!


一、工具背景

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

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

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

       4.make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。makefile都成为了一种在工程方面的编译方法。

       5.make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。


二、如何理解

       老规矩,首先拿出我们的老朋友text.c文件:

       编辑完成后进行:wq操作退出,接着创建一个makefile文件:

       接着我们先使用ls查看已有文件名,然后我们使用make指令:

       紧接着我们再次使用ls指令查看文件名,这时候发现我们的可执行文件已经出现,绿色的text文件,我们进行运行文件:

       由此可以看出,我们的文件已经被自动编辑完成了。

三、依赖关系

        上述文件 text ,它依赖 text.o

        text.o , 它依赖 text.s

        text.s , 它依赖 text.i

        text.i, 它依赖 text.c

        gcc  text.* -option text.* 就是与之对应的依赖关系


四、工作原理

在默认的方式下,我们只输入make命令,那么:

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

       2.如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“text”这个文件,并把这个文件作为最终的目标文件。

       3.如果text文件不存在,或是text所依赖的后面的text.o文件的文件修改时间要比text这个文件新(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成hello这个文件。

       4.如果text所依赖的text.o文件不存在,那么make会在当前文件中找目标为text.o文件的依赖性,如果找到则再根据那一个规则生成text.o文件。(这有点像一个堆栈的过程)

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

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

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

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


五、项目清理

       首先,我们需要了解:工程是需要被清理的

       像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编译。

       但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被执行的。

       大家可以将我们的 text目标文件声明成伪目标,进行测试一下。

       当我们不进行清理,使用make会出现这种情况:

       然后我们使用make clean指令,帮我们删除之前形成的临时文件: 

       我们再次运行make:

        可以看出,可以再次使用了。


结语:Linux项目自动化构建工具关于make/Makefile使用的分享到这里就结束了,没有进行展示的操作大家可以自行练习,希望本篇文章的分享会对大家的学习带来些许帮助,如果大家有什么问题,欢迎大家在评论区留言~~~ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1211457.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

达梦集群搭建

一、数据库安装 ###(一)安装前准备 版本准备 [rootlocalhost ~]# uname -a Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux将镜像文件传到/opt目录下 [rootlocalhost100 …

【PyQt小知识 - 1】:QLineEdit内容的更新和获取、设置无边框

文章目录 QLineEdit更新和获取文本框内容设置为无边框 QLineEdit 更新和获取文本框内容 更新:QLineEdit().setText(text) 获取:QLineEdit().text() from PyQt5.QtWidgets import * import sysapp QApplication(sys.argv)window QWidget() window.re…

sqli-labs(Less-4) extractvalue闯关

extractvalue() - Xpath类型函数 1. 确认注入点如何闭合的方式 2. 爆出当前数据库的库名 http://127.0.0.1/sqlilabs/Less-4/?id1") and extractvalue(1,concat(~,(select database()))) --3. 爆出当前数据库的表名 http://127.0.0.1/sqlilabs/Less-4/?id1") …

Java map 详解 - 用法、遍历、排序、常用API等

概要: java.util 中的集合类包含 Java 中某些最常用的类。最常用的集合类是 List 和 Map。 Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。 本文主要介绍java m…

金融行业如何数字化转型?_光点科技

金融行业的数字化转型涉及技术创新的引入、客户体验的改善、内部流程的优化、安全和合规性的加强以及员工技能和企业文化的转变。 技术创新 包括云计算、人工智能、大数据分析和区块链技术的采用。云计算增强数据处理的灵活性,AI和机器学习在风险评估和欺诈检测方面…

【技术分享】配置二层远程端口镜像案例

热门IT课程-CSDN博客文章浏览阅读24次。认证课程介绍:华为HCIA试听课程 : 华为HCIA试听课程:华为HCIA试听课程:华为HCIP试听课程:思科CCNA试听课程:思科CCNA试听课程:思科CCNA试听课程&#xff…

Arduino安装 esp32 by Espressif (2.0.11)

安装Arduino IDE 2.2.1 Arduino 中安装 esp32 by Espressif (2.0.11) Arduino 中安装 DS1302 库文件 2022年安装的Arduino是1.8.10版本的,主控芯片是外置 2MB Flash 的 ESP32-C3芯片。ESP-C3-12F-2M。 202206 Arduino软件的安装、配置与程序下载的全过程演示 2023…

plsql查询中文出现乱码

添加环境变量:如下 变量名:NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 变量名:TNS_ADMIN 变量值:D:\instantclient_11_2\network\admin 在Path中添加instantclient_11_2存放路径

TOUGH系列软件教程

查看原文>>>全流程TOUGH系列软件实践技术应用 TOUGH系列软件是由美国劳伦斯伯克利实验室开发的,旨在解决非饱和带中地下水、热运移的通用模拟软件。和传统地下水模拟软件Feflow和Modflow不同,TOUGH系列软件采用模块化设计和有限积分差网格剖分…

notpad++正则化,利用关键字符删除整行

首先,ctrlf,选中[替换],勾选正则表达式(可以勾选[匹配大小写],不用勾选[匹配新行])。在[查找目标]框输入[^(.*)"car_no_clean"(.*)$\n]。在$后加上\n,可以将被替换的行直接删除,不加则…

【广州华锐互动】AR技术为气象站远程监控及在线指导维修提供极大便利

随着科技的不断发展,人类对于自然环境的理解和掌控能力也在不断提升。其中,AR(增强现实)技术的应用,为气象监控带来了革命性的变化。AR远程气象监测,就是将AR技术与气象监控相结合,通过虚拟与现…

vue中通过.style.animationDuration属性,根据数据长度动态设定元素的纵向滚动时长的demo

根据数据长度动态设定元素的animation 先看看效果,是一个纯原生div标签加上css实现的表格纵向滚动动画: 目录 根据数据长度动态设定元素的animationHTMLjs逻辑1、判断是数据长度是否达到滚动要求2、根据数据长度设置滚动速度 Demo完整代码 HTML 1、确…

校园信息发布平台小程序的作用是什么

校园墙是校内信息传播的一种渠道,有专门的人添加校内学生、教师,谁有信息发布需求即可联系让其通过QQ、微信朋友圈、社群等形式发布,多年来,学生们习惯了这类方式。 但这种方式并不高效,缺乏信息的真实性以及便捷性&a…

Loguru:Python中强大的日志库

目录 一、Loguru的安装 二、Loguru的使用 2.1 日志级别的设置 2.2 日志的输出格式 2.3 日志轮转与压缩 2.4 日志的彩色输出 2.5 在生产环境中使用Loguru 2.6 日志的过滤和搜索 2.7 日志的自定义格式化 2.8 日志的上下文信息 2.9 日志的异步处理 2.10 日志的搜索和筛…

PSP - 蛋白质复合物结构预测 Template 的 Multichain Mask 2D (二维多链掩码)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/134406459 在 蛋白质复合物结构预测 中,AlphaFold2 Multimer 的 Multichain Mask 2D 对于 模版特征 (Template) 的影响较大&#xff0…

【Python】逆向与爬虫的故事

目录 一、前言 二、爬虫 1、什么是爬虫? 2、Python 爬虫的主要工具 3、爬虫的基本流程 4、实例代码 三、逆向 1、什么是逆向? 2、Python 逆向的主要工具 3、逆向的基本流程 4、实例代码 四、总结 一、前言 随着互联网技术的发展&#xff0c…

申明式管理方式与配置清单文件

目录 申明式管理方式 1、使用申明式管理方式相关操作 1)获取资源配置清单 2)更改获取的yaml配置清单,并进行修改然后创建或更新资源 3)在线修改或编辑资源配置 4)删除资源 2、如何获取资源配置清单文件模板&…

3D建模基础教程:编辑样条线【总层级】

在本期的3D建模基础教程中,我们将探讨“编辑样条线”的【总层级】。我们将从以下几个方面进行深入分析: 1️⃣ 理解“编辑样条线”的层级结构 在3D建模中,“编辑样条线”是一个非常重要的环节。它主要涉及到曲线的创建、修改和调整。通过学习…

【算法练习Day49】每日温度下一个更大元素 I

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 每日温度下一个更大元素 I总…

微信公众号预约挂号怎么做

一、引言 在当今快节奏的生活中,时间是非常宝贵的。为了方便患者快速、准确地预约挂号,微信公众号已经推出了预约挂号功能。通过公众号预约挂号,你可以轻松地安排自己的就诊时间,避免了长时间排队和等待的烦恼。本文将为你详细介…