【Linux】Linux下的项目自动化构建工具——make和makefile

news2024/11/16 12:27:08

❤️前言

        大家好,好久不见!今天小狮子为大家带来的文章是一篇关于Linux下的项目自动化构建工具——make和makefile的博客,希望能帮助到大家。

正文

        当我们进行涉及多文件的工程开发时,我们需要对很多不同类型、不同功能,存在于不同目录下的源文件进行编译操作,这时错综复杂的文件关系会对我们造成很大的麻烦。那么这时我们就需要使用到make和makefile这样的自动化构建工具。

        我们先大致地对make和makefile进行描述:

        makefile是一个文件,其中定义了各个源文件的编译规则,比如说哪个文件应该先编译,哪个文件应该后编译,哪些文件需要重新编译等。除此之外,在makefile中还可以进行一些功能操作,例如对工程中的老旧文件进行清理。

 

        make是一条指令,它可以解析makefile中的各种指令,从而自动化地对工程中的源文件进行各种操作。

 

        make和makefile搭配使用可以大大地减少我们的工作量,达成“自动化编译”,这时我们只需要一个指令便可以使整个工程完全自动编译。

        当我们大致地了解了make和makefile之后,我们接着对这两者进行详细的学习。

简单的运用

        当我们想要使用make和makefile,我们首先需要在当前目录下创建一个makefile,makefile的文件名可以为makefileMakefile或者GNUmakefile。这时固定的,因为在默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件。

        那么我们以经典的“Hello world!”来简单演示和讲解make和makefile的使用方法。当我们创建了一个makefile之后,我们还需要创建该程序所需要的源文件,我将它命名为main.c,并在其中编写相关的代码(输出"Hello world!")。

        准备过程完成如下:

          现在我们进行对makefile文件的编写,编写makefile时,我们需要写入的内容主要有两个,分别称为依赖关系依赖方法

依赖关系:

        表示一个文件的生成是依附于另一个文件,语法为 【目标文件:被编译文件】 ,也就是表明目标文件依赖被编译文件。

依赖方法:

        代表依赖关系中的依赖文件该如何转化为目标文件,语法为 【tab 由依赖文件生成目标文件的手段】(这里必须使用tab作为前缀)。

        那么让我们看看Hello world对应的makefile的依赖关系和依赖方法该如何编写:

         这样设定好依赖关系和依赖方法之后我们就可以使用make创建出名为 HW 的可执行文件。语法为【make 指令】。其中 :

  • makefile中可能会有多个目标文件,但是makefile会以第一个目标作为终极目标。
  • 使用make时的默认动作就是第一个目标对应的规则,也就是只输入make就会默认生成第一个目标。
  • make扫描makefile的顺序是从上到下。

         除此之外,如果我们现在想要对编译过程中产生的临时文件进行清理或者清理旧版本的程序时,如果我们直接使用rm指令进行清除,这样的行为未免有些粗鲁和危险。于是makefile中也需要支持对文件的清理工作,也就是clean。同样按照依赖关系和依赖方法的形式进行编写:

         那么我们现在可以尝试使用makefile中的规则对文件进行清理:

                 上面就是make和makefile的一些简单运用,现在我们来看看makefile的工作原理:

  1. 目标的生成: a. 检查依赖关系中的依赖文件是否存在; b. 若依赖文件不存在,则寻找是否有某个规则用来生成该依赖文件。
  2. 目标的更新: a. 检查目标的所有依赖,任何一个依赖有更新时,就重新生成目标; b. 目标文件比依赖文件时间晚,则需要更新。

        在目标的更新中提到了文件时间的问题,这里简单的拓展一些关于文件时间的知识。我们都知道,文件=文件内容+文件时间。文件时间一般被分成三个时间,可以简单记为ACM三个时间:A(Access)、C(Change)、M(Modify)。Change代表最近改变文件内容的时间,Modify代表最近改变文件属性的时间,Access代表最近读文件的时间。

伪目标

        如果我们不想考虑文件时间,而想要无论什么情况都重新编译,这时就需要设置伪目标。伪目标表示这个目标总是被执行。一般来说产生可执行文件的逻辑是不会用伪目标修饰的,伪目标一般用于clean。

特殊符号

        makefile中有一些特殊符号,这里列举一些特殊符号。

        - :表示此命令即使执行出错,也依然继续执行后续命令。如:

        -rm a.o build/

        @:表示该命令只执行,不回显。一般规则执行时会在终端打印出正在执行的规则,而加上此符号后将只执行命令,不回显执行的规则。如:

        @gcc -o HW main.c

        $@和$^ 前者指的是依赖关系中的目标文件,后者指的是依赖关系中的依赖文件。如;

        HW:main.c

        gcc -o $@ $^

🍀结语

        以上就是make和makefile的基本入门知识啦,希望能对大家有所帮助。

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

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

相关文章

如何查看论文被引用情况

Dimensions上汇聚了多种类型的学术成果(期刊、图书、专利、临床试验),它好的地方在于可将论文与被引用情况、研究资金来源、相关临床试验、专利信息以及政策文件全部关联起来,从而对一项研究进行了从起源到结果的全方位描述。 网…

第九十九天学习记录:C++核心:类和对象Ⅴ(五星重要)友元运算符重载

友元 在程序里&#xff0c;有些私有属性也能让类外特殊的一些函数或者类进行访问&#xff0c;就需要用到友元的技术 友元的目的就是让一个函数或者类访问另一个类中私有成员 友元的关键字为frirend 友元的三种实现 1、全局函数做友元 #include<iostream> using namespa…

vue 使用百度地图记录

参考文档 https://lbsyun.baidu.com/index.php?titlejspopular3.0/guide/infowindow https://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference_3_0.html#a0b0 1.百度地图标注点点击出现infoWindow信息窗口添加点击事件 var opts {width: 200, // 信息窗口宽度height:…

【TS】学习笔记

1、所有的JavaScript代码都是有效的Typescript代码&#xff0c;用TypeScript编译器编译TypeScript里的Javascript代码&#xff0c;编译后的结果与原始的Javascript代码一模一样&#xff0c;即文件扩展名从.js改为.ts&#xff0c;不会造成任何负面的影响 2、JavaScript代码迁移…

idea将代码片段提取成一个方法快捷方式

CtrlAltM 今天写代码发现有的方法太长了&#xff0c;为了使我们的代码更加简洁&#xff0c;就可以使用idea的这个功能 效果如图 改造前&#xff1a; 提取出两个方法 如何使用

Bootloader Design of PIC18 series MCU - 进阶篇

1.遭遇到问题 在&#xff1a;PIC18 Bootloader 设计基础 一文中&#xff0c;我们讨论了Bootloader与上层应用APP各自编译的方法。在ROM上的空间分配、以及跳转、中断的处理等内容。那篇文章包含了所有与PIC单片机Bootloader设计相关的技术问题。但是距离一个真正可用的Bootloa…

python接口自动化(二十一)--unittest简介(详解)

简介 前边的随笔主要介绍的requests模块的有关知识个内容&#xff0c;接下来看一下python的单元测试框架unittest。熟悉 或者了解java 的小伙伴应该都清楚常见的单元测试框架 Junit 和 TestNG&#xff0c;这个招聘的需求上也是经常见到的。python 里面也有单元 测试框架-unitt…

element table列表根据数据设置背景色

效果 页面代码 通过:cell-class-name动态绑定类名 <el-table :data"tableData" style"width: 100%" :cell-class-name"myclass"><el-table-column prop"date" label"日期" width"180"> </el-ta…

pytest测试框架的基本使用与介绍

pytest介绍 pytest是一个非常成熟的全功能的Python测试框架&#xff0c;主要特点有以下几点&#xff1a; 1、简单灵活&#xff0c;容易上手&#xff0c;文档丰富&#xff1b; 2、支持参数化&#xff0c;可以细粒度地控制要测试的测试用例&#xff1b; 3、能够支持简单的单元测…

Jenkins---jenkins生成Allure报告

目录 前言 Allure插件安装 生成Allure报告 遇到的问题 总结&#xff1a; 前言 前几天介绍了如何生成html报告&#xff0c;目前绝大部分公司都是用的allure报告&#xff0c;那么今天也介绍下如何通过jenkins生成allure报告。 Allure插件安装 jenkins中存在支持allure报告…

Pytorch从入门到精通:一、准备工作与查询函数

之前虽然做了不少计算机视觉的项目&#xff0c;但是如果让我从0还是用Pytorch开始写的话还是有一点难度。原因就在于没有系统的学习Pytorch&#xff0c;对于里面的不少模块都只知道使用&#xff0c;不知道原理&#xff0c;知道它能工作&#xff0c;但是不知道怎么样工作的。所以…

QT - 20230707

登录界面练习 #include "loginwindow.h"QIcon fetchIconWithName(QString name) {QString res "../login/images/" name;return QIcon(res); }LoginWindow::LoginWindow(QWidget *parent): QMainWindow(parent) {this->resize(600, 800);this->se…

小红书私信软件:把微信二维码联系方式隐藏在图片中推广引流找客源

小红书私信软件&#xff1a;把微信二维码联系方式隐藏在图片中推广引流找客源,小红书还能这么玩&#xff1f;小红书暑期聊天功能上新了&#xff0c;共享收藏夹、斗图神器&#xff0c;暑期表情&#xff0c;笔记表态....快去和好友一起解锁新功能吧&#xff01; #小红书 最近发现…

YOLOv5-第Y1周:调用官方权重进行检测

YOLOv5-第Y1周&#xff1a;调用官方权重进行检测 YOLOv5-第Y1周&#xff1a;调用官方权重进行检测一、前言二、我的环境三、下载源码四、运行代码五、视频检测八、总结 YOLOv5-第Y1周&#xff1a;调用官方权重进行检测 一、前言 &#x1f368; 本文为&#x1f517;365天深度学…

【Redis-工具类】自定义Redis工具类并使用其进行简单操作

【Redis-工具类】自定义Redis工具类并使用其进行简单操作 1&#xff09;自定义 Redis 工具类2&#xff09;工具类的简单使用 1&#xff09;自定义 Redis 工具类 package gaei.cn.x5l.x5lhive2cos.utils;import gaei.cn.x5l.x5lhive2cos.CosDataBackupHistory; import gaei.cn.…

AI智能化数据分析,赋能文旅直播发展新赛道

一、文旅直播发展背景 近期&#xff0c;旅游业市场呈现火热态势。暑期旅游市场预计迎来新一轮旅游小高峰&#xff0c;旅游业进入结构性复苏新阶段。而随着社交媒介的普及与旅游直播的兴起&#xff0c;全国多地文旅“出圈”形成热议。 对于文旅产业发展来说&#xff0c;高品质…

【如何在工作中保持稳定的情绪 --- 保持稳定情绪的7个工作技巧】

导语&#xff1a; 在现代工作环境中&#xff0c;保持稳定的情绪是一项至关重要的技能。当我们遇到挑战、压力和严峻的工作条件时&#xff0c;情绪的稳定性对于我们的工作效率和心理健康至关重要。本文将分享七个实用的工作技巧&#xff0c;帮助你保持稳定的情绪并提升工作质量…

面对chatGPT,冷静比鸡血更重要!

这段时间 chatGPT 也算是疯狂的吸引眼球了。 看起来广告费没白花&#xff0c;不管说的对不对&#xff0c;反正说它一定要用**“颠覆”“天花板”“惊艳”“抢大多数人的饭碗”**之类的词。 再大一点的描述就是&#xff1a;留给人类的时间不多了。扼腕叹息、杞人类生存空间而忧…

springboot项目开启https协议

1、在windows以管理员身份运行cmd,输入如下命令生成证书 keytool -genkey -alias myhttps -keyalg RSA -keysize 2048 -validity 36500 -keystore "D:/tmp/ssl/myhttps.keystore"注释 命令&#xff1a;keytool -genkey -alias testhttps -keyalg RSA -keysize 204…

蓝牙资讯|苹果Beats Studio Pro耳机曝光,支持苹果和谷歌的查找功能

国外科技媒体9to5Mac曝光苹果Beats Studio Pro耳机&#xff0c;这款耳机配备了 2 个定制的 40 毫米驱动单元&#xff0c;即便是在最高音量下&#xff0c;也能确保不会失真。Beats Studio Pro 还将配备集成的数字处理器&#xff0c;该处理器“优化最终频率响应&#xff0c;以获得…