4---自动化构建代码(逻辑梳理,轻松理解)

news2024/12/25 0:32:53

一、需求引出:

  • 在使用编译器编译代码时,无论我们在一个项目中写了多少个文件(包括头文件、源文件),我们都可以一键完成编译,编译器会自动处理各个文件之间的包含,调用关系。
  • 但是在Linux中,我们在一个目录下写一个项目,如果这个项目包含多个头文件和多个源文件,我们需要将他们手动一个个编译成 ".o" 文件,然后链接生成可执行程序。虽然不会耗费很多时间,但是依旧没有使用编译器那样方便。
  • 而且,如果我们修改了项目中的一部分文件,我们就需要重新编译这些修改的文件。换而言之,我们需要记住每一个被修改过的文件。这未免成本过高,远不如直接使用编译器划算。
  • 所谓自动化构建代码,就是为了解决以上的问题。使得在Linux下也可以像编译器一样,一键将项目编译生成可执行程序。

二、需要的文件和工具:

  • 需要的文件为Makefile文件,直接建立在项目所在目录下。需要注意的是该文件的名称一定要为Makefile或者makefile,不能是其他。
  • 需要的工具是make,它是用来调用makefile文件的。
  • 我们可以简单理解:makefile是一个脚本文件,make是一个脚本解释器。

三、makefile实现简单的自动化构建可执行程序:

3.1详细解析:

  • 第一行:要形成的可执行程序的名称 :需要编译的文件的名称
  • 第二行:tab键开头(不能使用空格替代) 要执行的命令
  • 第一行称为依赖关系,第二行称为依赖方法。通过依赖关系调用依赖方法即可完成自动化调用。
mycode:code.c
    gcc code.c -o mycode

3.2案例演示:

  • 首先创建一个code.c文件,功能是打印mycode字符串。

        

  • 当前目录下没有可执行程序mycode

        

  • 使用make,自动调用makefile文件中的命令“ gcc code.c -o code.c”

        

  • 查看当前目录,发现生成了可执行程序mycode,并且运行发现可以正常运行。

        

四、makefile实现清理可执行文件、临时文件:

4.1详细解析:

  • 第一行:.PHONY:clean ,表示clean是一个伪目标,将一个命令设置为伪目标,就可以省略他的依赖关系或者依赖方法。
  • 第二行:“clean:”,表示clean命令。
  • 第三行:tab开头 要执行的指令。
.PHONY:clean
clean:
    rm -f mycode

4.2案例演示:

  • 当前目录存在可执行程序mycode

        

  • 调用makefile文件的clean命令

        

  • 查看目录,发现可执行程序mycode被清理

        

五、如何规范的使用make解释器:

5.1规范使用及细节:

  • 使用make解释器调用makefile文件时,语法为:“make+命令”
  • 可以直接make不加命令,这样使用会直接调用makefile文件的第一个命令,上面第三点构建可执行程序时,就是直接make,可以回顾一下。
  • 一般将clean命令放在makefile文件的结尾。

5.2make解释器自动判断代码新旧:

  • makefile自动化生成可执行程序时,会自动识别代码的新旧,如果在上一次自动化生成可执行程序之后未对代码做出修改,make解释器会拒绝再次自动化构建可执行程序。

        

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

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

相关文章

Docker in Docker(DinD)原理与实战

🐇明明跟你说过:个人主页 🏅个人专栏:《Docker幻想曲:从零开始,征服容器宇宙》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Docker简介 2、Docker …

Kubernetes学习-深入Pod篇(一) 创建Pod,Pod配置文件详解

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Kubernetes渐进式学习-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 1.前言 我们在前面的文章讲解了Kubernetes的核心概念和服务部署&#x…

08.3.grafana自定义图形

grafana自定义图形 找插件里面的zabbix 点击update 数据源—zabbix数据源,添加zabbix数据源 选择zabbix类型 我这里配置的是本地,所以URL直接localhost 这里配置zabbix登录账号密码Admin/zabbix 然后点击保存并测试,会直接显示版本 导入模板&…

JavaSE——集合框架一(1/7)-集合体系概述(集合体系结构,Collection集合体系)、Collection的常用方法(介绍,实例演示,代码)

目录 集合体系概述 集合体系结构 Collection集合体系 Collection的常用方法 介绍 实例演示 完整代码 集合体系概述 集合体系结构 集合是一种容器,用来装数据的,类似于数组,但集合的大小可变,开发中也非常常用。 为了满足…

ACM 的代码编码示例

写在最前面的 实践的顺序, 应该是先将基础的 数据结构题目类型给实现。 然后再开始尝试 实现对应类型的算法题目,如回溯算法, 贪心算法, 动态规划, 图论; 基础的数据结构, 推荐卡尔的&#xff…

【C++】vector的底层原理讲解及其实现

目录 一、认识vector底层结构 二、初始化vector的函数 构造函数拷贝构造赋值构造initializer_list构造迭代器区间构造 三、迭代器 四、数据的访问 五、容量相关的函数 六、关于数据的增删查改操作 一、认识vector底层结构 STL库中实现vector其实是用三个指针来完成的&#x…

PY32F403系列单片机,32位M4内核MCU,主频最高144MHZ

PY32F403系列单片机是基于Arm Cortex-M4核的32位通用微控制器产品。内置的FPU和DSP功能支持浮点运算和全部DSP指令。通过平衡成本,性能,功耗来获得更好的用户体验。 PY32F403单片机典型工作频率可达144MHZ,内置高速存储器,丰富的…

sql注入之bool盲注

目录 盲注步骤 1、进入靶场 2、如下图所示输入?id1‘ 判断此时存在注入点 3、判断列数 ​编辑 4、开始盲注 普通的python脚本 代码思想 结果 二分查找python脚本 二分查找算法思想简介 二分查找与普通查找的主要差距 代码思想 代码 结果​编辑 下面以…

图像融合-下游任务(目标检测、实例分割、深度估计、局部区域细节放大)

下游任务: 采用目标检测、实例分割和深度估计的下游任务来验证图像融合结果质量。 文章目录 下游任务:1.目标检测2.实例分割3.深度估计局部细节放大工具Update1.目标检测 YOLOv8:https://github.com/ultralytics/ultralytics 步骤内容第一步下载项目到本地第二步安装READ…

文献阅读——中国农产品期货的正负价格泡沫(LPPLS)

Positive and negative price bubbles of Chinese agricultural commodity futures Fang, Ming, Yizhou Lin, and Chiu-Lan Chang. “Positive and negative price bubbles of Chinese agricultural commodity futures.” Economic Analysis and Policy 78 (2023): 456-471. 经…

以项目为中心打造企业卓越经营管理体系︱PMO大会

全国PMO专业人士年度盛会 广东林氏家居股份有限公司战略副总裁杨永柠先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“以项目为中心打造企业卓越经营管理体系”。大会将于6月29-30日在北京举办,敬请关注! 议题简要&…

WPS表格:使用vlookup函数解决乱序数据对应问题

我们常常会遇到两个表格的内容相同,但是顺序不一致的情况。并且这种顺序无关于简单的排序,而是一种业务性很强的复杂排序规则。下面我举个例子,使用VLOOKUP复制数据。 假设太阳系行星举办了一次卖萌比赛,由太阳妈妈决定谁是最萌的…

【JVM】ASM开发

认识ASM ASM是一个Java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。 ASM可以直接产生二进制class文件,也可以在类被加载入虚拟机之前动态改变类行为,ASM从类文件中读入信息后能够改变类行为,分析类信息&#xff…

【Unity 鼠标输入检测】

Unity 鼠标输入检测 Unity提供了多种方法来检测和处理鼠标输入,允许开发者在游戏中实现对鼠标移动、点击和滚轮滚动的响应。以下是一些基本的鼠标输入检测方法: 1. Input.mousePosition 这个属性返回当前鼠标指针的屏幕坐标。坐标是以像素为单位的&…

JVM调优-调优原则和原理分析

1.写在前面 对于JVM调优这个话题,可能大部分程序员都听过这个名词。 但是绝大多数程序员,都没有真真实实去干过,都没有真实的实践过。也不懂得如何调优?不知道要调成怎么样? 那今天咋们就对这个话题来展开描述一下&…

IDEA安装使用Git

IDEA安装使用Git 1 Git下载与安装 2 在IDEA中使用Git 2.1 IDEA中配置Git 在IDEA中使用Git,本质上还是使用本地安装的Git软件,所以需要在IDEA中配置Git。 2.2 在IDEA中使用Git 2.2.1 获取Git仓库 在IDEA中使用Git获取仓库有两种方式: 本地初始化仓库从…

软件全套资料梳理(需求、开发、实施、运维、安全、测试、交付、认证、评审、投标等)

软件全套精华资料包清单部分文件列表: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书&#xff0c…

kali linux2024.1版安装

1 基于 VMware 安装 Kali 系统 打开已经安装好的 VMware 程序,点击选项卡中的“主页”--》而后点击“创建新的虚拟机” 选择“典型(推荐)”,并点击“下一步” 客户机操作系统镜像选择:选择“稍后安装操作系统”,并点击“下一步”…

全新神经网络架构KAN——本文用于学习与探索

论文地址:https://arxiv.org/pdf/2404.19756 Github:GitHub - KindXiaoming/pykan: Kolmogorov Arnold Networks 文档说明:Welcome to Kolmogorov Arnold Network (KAN) documentation! — Kolmogorov Arnold Network documentation 本文仅…

2024年4月24日华为春招实习试题【三题】-题目+题解+在线评测,2024.4.24,华为机试

2024年4月24日华为春招实习试题【三题】-题目题解在线评测,2024.4.24,华为机试 🏩题目一描述:输入格式输出格式样例1样例2样例3数据范围解题思路一:dfs解题思路二:直接二分查找哇!解题思路三&am…