Linux一看就会——make/Makefile

news2024/11/18 1:41:56

Linux一看就会——make/Makefile

背景

1.会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。
2.一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的
规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂
的功能操作
3.makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编
译,极大的提高了软件开发的效率。
4.make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命
令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一
种在工程方面的编译方法。
5.make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

代码实现

先编写一下makefile(Makefile)

在这里插入图片描述
上面的文件 test ,它依赖 test.o
test.o , 它依赖 test.s
test.s , 它依赖 test.i
test.i , 它依赖 test.c

可以看到生成的makefile

在这里插入图片描述

将之前生成的test删除掉

在这里插入图片描述
在这里插入图片描述

运行make

在这里插入图片描述
在这里插入图片描述
这里有一个知识点,连续使用make 你会发现只有第一次可以使用,之后的就显示已经存在目标文件了,如果你在更改一下makefile,再make就可以make了,不过也只有一次。

立即执行代码

在这里插入图片描述
这里的clean 就是输入之后立马执行,不在访问。这种代码前面都要加上 .PHCNY。
在这里插入图片描述

原理

make是如何工作的,在默认的方式下,也就是我们只输入make命令。那么,

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

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

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

相关文章

分享126个ASP源码,总有一款适合您

ASP源码 分享126个ASP源码,总有一款适合您 126个ASP源码DownLoad链接:https://pan.baidu.com/s/1wekzBbNE6JSFWtyLb_CdQg?pwdu1e0 提取码:u1e0 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..…

I16-python中的Counter类

在很多场景中经常会用到统计计数的需求,比如在实现 KNN算法时统计 k 个标签值的个数,进而找出标签个数最多的标签值作为最终 kNN 算法的预测结果。Python内建的 collections 集合模块中的 Counter 类能够简洁、高效的实现统计计数。Counter 是 dict 字典…

Unity 3D 三维模型简介||

Unity 3D 三维模型简介 三维模型是用三维建模软件建造的立体模型,也是构成 Unity 3D 场景的基础元素。 Unity 3D 几乎支持所有主流格式的三维模型,如 FBX 文件和 OBJ 文件等。 开发者可以将三维建模软件导出的模型文件添加到项目资源文件夹中&#xf…

【服务器数据恢复】意外断电导致linux服务器故障的数据恢复案例

服务器数据恢复环境&故障: 某品牌730服务器,linux操作系统。 机房意外断电导致服务器部分文件丢失。 服务器数据备份&故障分析: 1、将linux服务器连接到准备好的数据恢复服务器上,以只读模式对服务器数据做镜像备份&#…

geoserver 图层访问权限控制

目录 一、环境 二、问题 三、设置登录才能访问图层 ①、创建身份验证过滤器 ②、创建过滤器 ③、校验 ④、过滤后的问题 一、环境 geoserver2.17.0 二、问题 1、geoserver图层不需要登录就能访问,是否存在安全隐患? 答:会有一定的安全隐…

【Linux操作系统】计算机体系结构和操作系统与进程概念深入理解

文章目录一.现代计算机体系结构1.和冯诺依曼体系结构的异同2.计算机的五大核心部件3.举例子:“我爱你”4.CPU,内存,磁盘的联系a.三者读写速度对比b.规定:CPU不直接和外设打交道二.操作系统1.操作系统三段论2.系统调用接口3.用户操作接口三.进程1.什么是进程?2.PCB3.查看进程4.…

222.完全二叉树的节点个数 |递归优化思路 + 复杂度分析

完全二叉树的节点个数 leetcode : https://leetcode.cn/problems/count-complete-tree-nodes/ 递归思路 递归的思路很简单, 假设们要统计一棵树的节点数, 那么 只要统计根节点的左子树的节点数, 和右子树的节点数加上根节点即可 那么, 假设我们要统计左子树的节点数, 其实就…

Centos7 Minimal 版本基本配置记录

每次搭测试环境之前都需要先装一台干净的虚拟机,然而 Centos7 Minimal 版本快速装完之后还需要配置:网络、国内源、一些基础工具(net-tools、vim)等才能远程连接和使用。记录一下,方便下次快速配置使用。 目录 1、网…

Docker镜像加载原理

文章目录什么是镜像 ?Docker镜像加载原理UnionFS (联合文件系统)Docker镜像加载原理分层理解镜像Commit什么是镜像 ? 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件&#xff0…

C语言-自定义类型-枚举和联合(11.3)

目录 思维导图: 1.枚举 1.1 枚举类型的定义 1.2 枚举的优点 1.3 枚举的使用 2. 联合(共用体) 2.1 联合类型的定义 2.2 联合的特点 2.3 联合大小的计算 写在最后: 思维导图: 1.枚举 1.1 枚举类型的定义 例&…

Spring复习(三)

AOP AOP(Aspect Oriented Programming)面向切面编程,aop是一种设计思想,是oop面向对象编程的一种补充和完善,它通过预编译方式和运行期间动态代理的方式达成在不修改源代码的情况下,实现对业务逻辑的增强。 相关术语 横切关注点…

论文投稿指南——中文核心期刊推荐(农业基础科学)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

【计组】存储器层次结构全景和局部性原理--《深入浅出计算机组成原理》(八)

课程链接:深入浅出计算机组成原理_组成原理_计算机基础-极客时间 目录 一、存储器层次结构全景 (一)SRAM (二)DRAM (三)存储器的层级结构 二、局部性原理 一、存储器层次结构全景 &…

Eureka读时加写锁,写时加读锁,到底是故意为之还是一个bug?

在对于读写锁的认识当中,我们都认为读时加读锁,写时加写锁来保证读写和写写互斥,从而达到读写安全的目的。但是就在我翻Eureka源码的时候,发现Eureka在使用读写锁时竟然是在读时加写锁,写时加读锁,这波操作…

uni-app | 从零创建一个新项目以及关于网络请求配置和分包

一、uni-app简介uni-app 是一个使用 Vue.js 开发所有前端应用的框架。开发者编写一套代码,可发布到 iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。二、开发工具uni-app官方推荐使用HBuilderX来…

【JS 逆向百例】X-Bogus 逆向分析,JSVMP 纯算法还原

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未…

72小时灵感冲刺,创意就该这么玩 | LigaAI Hackathon特别策划

2023 年 1 月 9 日至 12 日,LigaAI 团队全员出逃:放下迭代,暂缓需求,处处充斥着「可以摸鱼➕卷死他们」的矛盾又欢乐的气息。职场和远程的伙伴们无一不在热烈讨论、积极组队、抢占会议室、搜刮零食饮料…… 是什么让矜持内敛的技…

微信小程序的启动和渲染过程(加组件分类和组件的基本使用以及API分类)

小程序的启动过程 把小程序的代码包下载到本地解析app.json全局配置文件执行app.js小程序入口文件,调用App()创建小程序实例渲染小程序首页小程序启动完成 小程序页面渲染的过程 加载解析页面的.json配置文件加载页面的.wxml模板和.wxss样式执行页面的.js文件,调用page(创建…

网站建设的具体流程

有网站制作需求的朋友想了解一下网站建设的具体流程,防止不良的网站制作公司的业务人员用虚假的工作量欺骗自己报出高价,米贸搜详细给你整理一下一个网站的建设有哪些流程:1.在线或当面沟通网站制作需求,详细沟通网站的功能需求、设计风格以及…

功率放大模块的作用是什么(功率放大器模块的应用范围)

功率放大模块是一种能够把开关电源、数字功放集成到一起的放大模块。很多人对于功率放大模块的作用是什么以及功率放大模的应用范围都不清楚,下面就来详细的为大家介绍下什么是功率放大模块以及功率放大模块的基础知识。 一、什么是功率放大模块 功率放大模块是一种…