一文教你学会Makefile脚本的简单应用

news2024/11/23 17:02:33

一文教你学会Makefile脚本的简单应用

  • 一.什么是Makefile脚本
  • 二.Makefile语法
  • 三.使用Makefile编译多个文件
    • 3.1 运行脚本
    • 3.2 利用Makefile删除不必要文件
  • 四.Makefile进阶语法
    • 4.1在Makefile中使用变量
    • 4.2 Makefile中通配符
  • 五.总结

一.什么是Makefile脚本

Makefile其实就是一种脚本语言,跟python脚本一样,方便你程序的开发。当我们编译的文件过多,而又需要经常编译的时候就需要写Makefile脚本语言。或者方便别人去编译你的程序(其他人不知道如何编译),拿到你的Makefile文件后,只需要make一下,程序就编译出来了。

二.Makefile语法

Makefile包含一系列规则。如下
目标(target):依赖(prerequiries)
tab键+命令
它是如何执行的呢,当依赖文件发生改变的时候就会执行命令!这样说可能有点抽象,那么举个例子。
左边main.c文件,右边Makefile文件。
在这里插入图片描述
我们先make一下,看看发生什么。
在这里插入图片描述
make 之后就生成了main可执行文件。现在解释一下上诉的Makefile语法。目标,依赖,命令之间的关系,当依赖文件发生改变时,就会执行命令,重新生成依赖。所以我们上述脚本就是当main.c发生改变时,make一下就能重新生成main可执行文件。那么如果我再make一下会发生什么呢?
在这里插入图片描述
可以看到因为main.c文件没有改变,所以make一下并没有效果。你们可以去试一下改变main.c文件再去执行一下make。看看是不是重新生成了main可执行文件。

三.使用Makefile编译多个文件

我们先创建3个文件 1.c, 2.c ,3.c 和一个Makefile文件
在这里插入图片描述
然后编写Makefile脚本
![在这里插入图片描述](https://img-blog.csdnimg.cn/21ad4c05a1624cd4bb5313f5298162b9.png

我们先生成.o文件(目标文件),最后再进行链接成可执行文件,这样做有什么好处了,就是当一个.c文件发生改变时,其他文件只需要执行最后一步链接成main可执行文件,而不需要重新生成.o目标文件。在这个实验中区别不到,如果是比较大的项目,可能就几千上万个.c文件(比如linux内核源码),这样就大大提高了效率。

3.1 运行脚本

注意:我们这里只是测试,并没有写1.c ,2.c, 3.c 里面的内容。现在我们make一下
在这里插入图片描述

可以看到执行了以下语句,符合我们的预期。

3.2 利用Makefile删除不必要文件

我们只想生成main可执行文件,但是生成了很多不必要中间文件(1.o,2.o,3.o)。我们此时可以使用一个Makefile语法删除掉不需要的文件。
在这里插入图片描述
修改Makefile 文件
在这里插入图片描述
然后执行make clear,发现执行了 rm 1.o 2.o 3.o
在这里插入图片描述
注意:这里.PHONY:是固定的,clear:可以换成其他如XX: 最后执行make XX即可。

四.Makefile进阶语法

前面几个语法只是Make执行规则,下面提几个进阶语法,基本就能看懂别人写好的Makefile脚本了

4.1在Makefile中使用变量

如在上面实例中,1.o,2.o,2.o使用了三次,这里我们可以用变量替代,减少工作量(如调大型脚本调用多次的时候)下面是示例。
我们使用变量object(随便命名即可)来保存值,最后$(object)就能取到值。
在这里插入图片描述
我们make一下,发现效果一样。
在这里插入图片描述

4.2 Makefile中通配符

如 *.o代码当前目录下所有后缀为.o的文件.Makefile也可以修改为这样。
在这里插入图片描述

五.总结

本文就讲这么多了,只涉及一点基础,适合小白,如果需要深入了解Makefile,博主推荐去看《跟我一起学Makefile》这本书!!!。

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

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

相关文章

Nginx:location与rewrite

目录 一.location与rewrite区别 1.1.基于Nginx的location与rewrite常用的正则表达式(Nginx的正则表达式) 二.location模块 2.1.location的三种匹配类别 2.2.location的常用匹配规则 2.3.location匹配优先级 2.4.location模块使用实例 三.rewrite…

第2讲:Vue开发环境的搭建及运行

Vue开发环境搭建步骤 1、安装node http://www.nodejs.com.cn/ 一般安装在根目录下,直接下一步下一步安装即可。如何检测安装完毕 node -v 2、第二步:安装vue-cli脚手架 npm install -g vue/cli ,查看安装版本 vue --version 3、第…

Buildroot添加自定义文件

在日常开发中,我们经常会向buildroot文件系统里添加自定义文件。本文介绍几种添加的方法 一、buildroot/system/skeleton目录 skeleton能够在目标文件系统编译完成后将指定文件覆盖到某个目录。通过这种方式,我们可以方便地添加或修改一些文件到根文件系…

【lesson11】环境变量

文章目录 环境变量的认识main函数参数问题 环境变量的认识 我们知道我们运行自己写的可执行程序的时候,我们必须带路径才能运行,可是执行系统指令的时候不用路径就能运行。 演示: 问题:系统命令可以直接运行,自己写…

单链表详细解析|画图理解

前言: 在前面我们学习了顺序表,相当于数据结构的凉菜,今天我们正式开始数据结构的硬菜了,那就是链表,链表有多种结构,但我们实际中最常用的还是无头单向非循环链表和带头双向循环链表,我们今天先…

删除表

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: drop table 表名; 说明:连同表结构、表中的数据都删除 案例:删除test03表,并验证 mysql> desc test03; ---…

安装Pymc3模块包问题记录

首先跟着各个方法安装,都不行,导入pymc3包时,就会报各种错;最后找了好几个博客跟着修改,最终才把pymc3包安装上了,也能导入进去了。 重新整理下安装步骤: 1、下载安装Anaconda3: …

【趣味JavaScript】5年前端开发都没有搞懂toString和valueOf这两个方法!

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&#x1…

在C或C++中查找内存泄漏

编程软件中的内存泄漏可能很难精确定位,因为这里面有大量的数据。本文中,您可以学习如何借助运行时错误检测工具查找C和C应用程序中的内存泄漏。 什么是内存泄漏?C和C语言实例 What Is a Memory Leak? 当您面临内存泄漏时,C和C…

师德师风演讲稿写作格式:如何用三句话吸引听众的注意力

写师德师风演讲稿时,可以按照以下格式进行写作: 1. 开头部分: a. 引起听众的兴趣,可以使用一个引人入胜的故事、一个有趣的事实或者一个引人思考的问题。 b. 简要介绍自己以及演讲的主题。 2. 主体部分: a. 阐述师…

多维时序 | MATLAB实现GWO-BP多变量时间序列预测(灰狼算法优化BP神经网络)

多维时序 | MATLAB实现GWO-BP多变量时间序列预测(灰狼算法优化BP神经网络) 目录 多维时序 | MATLAB实现GWO-BP多变量时间序列预测(灰狼算法优化BP神经网络)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.MATLAB实现GWO-BP多变量时间序列预测(灰狼算法优化BP神经网络)&…

华为云云耀云服务器L实例评测 | 云服务器搭建自己的gitlab代码仓库手把手教学

📋 前言 🖱 博客主页:在下马农的碎碎念🤗 欢迎关注🔎点赞👍收藏⭐️留言📝✍ 本文由在下马农原创,首发于CSDN📆 首发时间:2023/09/26📅 最近更新时…

crypto:Quoted-printable

题目 解压文件后可得到提示文本 好了这个没接触过,参考别的大佬wp QP为可打印字符编码,根据加密方式任何一个8位的字节值可编码为3个字符:一个等号“”后跟随两个十六进制数字(0–9或A–F)表示该字节的数值。 利用网…

完全背包 动态规划 + 一维dp数组

动态规划:完全背包理论基础 每件商品都有无限个!!! (1)0-1背包的核心代码 解决0-1背包问题(方案二):一维dp数组(滚动数组)_呵呵哒( ̄…

CodeWhisperer,非常丝滑的AI代码神器

文章目录 什么是 Amazon CodeWhisperer?快速上手CodeWhisperer安装配置如何使用 Amazon CodeWhispererCodeWhisperer初体验:hello world Python语言快速入门向文件写入数据读取csv文件排序算法之冒泡排序设计模式之单例模式 使用CodeWhisperer快速上手Py…

这本书竟然把JAVA讲的如此透彻!漫画JAVA火爆出圈!

亲爱的粉丝们,你是否曾经为学习JAVA而苦恼?繁复的代码和复杂的逻辑常常让人感到头大。不过,今天我要为大家介绍一本神奇的书——《漫画JAVA》,它以图文并茂的方式,轻松诙谐地讲解了JAVA的方方面面。在这篇文章中&#…

基于.Net Core实现自定义皮肤WidForm窗口

前言 今天一起来实现基于.Net Core、Windows Form实现自定义窗口皮肤,并实现窗口移动功能。 素材 准备素材:边框、标题栏、关闭按钮图标。 窗体设计 1、创建Window窗体项目 2、窗体设计 拖拉4个Panel控件,分别用于:标题栏、关…

LabVIEW开发实时自动化多物镜云计算全玻片成像装置

LabVIEW开发实时自动化多物镜云计算全玻片成像装置 数字病理学领域正在迅速发展,这主要是由于计算机处理能力、数据传输速度、软件创新和云存储解决方案方面的技术进步。因此,病理科室不仅将数字成像用于图像存档等简单任务,还用于远程病理学…

无菌生产使用的纯蒸汽质量检测必要性及验证服务

纯蒸汽常被用于制药行业的无菌生产中。无菌生产所用到的物料、容器、设备等物品需要使用纯蒸汽进行湿热灭菌处理。纯蒸汽的主要检测指标,如微生物限度、电导率、TOC等应满足《中华人民共和国药典》中注射用水的质量指标规定。 当纯蒸汽用于湿热灭菌时,为…

【MySQL】开启 canal同步MySQL增量数据到ES

开启 canal同步MySQL增量数据到ES canal 是阿里知名的开源项目,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。示使用 canal 将 MySQL 增量数据同步到ES。 一、集群模式 图中 server 对应一个 canal 运行实例 ,对应一…