【Linux课程学习】make/Makefile:Linux项目自动化构建工具

news2024/9/21 22:42:33

🎁个人主页:我们的五年

🔍系列专栏:Linux课程学习 

🌷追光的人,终会万丈光芒

🎉欢迎大家点赞👍评论📝收藏⭐文章

🍉一.make/Makefile的理解:

写成Makefilemakefile都是可以的。

先来看看百度百科的解释:

1.Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员。

2.整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。极大提高了效率

所以对于程序员来说,make/Makefile是很重要的。


本人的理解:

让我来解释一下就是,我们在项目中会生成很多目标文件,而且会生成很多次。如果我们不用make/Makefile,每次我们都要写依赖关系(需要的源文件,也就是要用哪个文件生成去生成新的文件),还有依赖方法(具体通过什么方法生成)。

如果我们在Makefile文件中(Makefile和makefile都可以,m可大写可小写),写好了 依赖关系和依赖方法,我们只需要写make+目标文件,就会直接生成我们需要的目标文件。如果只写make,目标文件省略,那么会生成第一个目标文件,也就是makefile文件最开始的文件。

🍉二.makefile文件的构成:

make是一条命令,makefile是一个程序。两者构成了可执行程序。

1.目标文件(target file)。

2.依赖文件(Dependent file)。

●目标文件和依赖文件构成了依赖关系 。

●目标文件在前,依赖文件在后,中间有:

写好这一套以后,我们直接保存退出 ,然后在命令行输入make test,就会根据依赖关系和依赖方法生成test文件。

发生错误时,make会直接退出。make会进行报错。

注:在依赖方法前面加上@,在使用make的时候,可以不让依赖方法回显。

例如:

makefile文件如下:

🥦不加@,就会回显依赖方法:

🥦加上@,就不会回显依赖方法。

🍉三 .更加规范便捷的用法写makefile文件:

🥥makefile文件中注释语句:

在语句前面加上#就可以注释语句

🥥首先是变量的使用:

变量的定义方法:

新名字=原文件的名字

例如:

target=test

depend=test.cpp

将上面的改完就是:

使用变量时,要使用$,可以理解为C语言的解引用。之后依赖文件和目标文件发生变动的时候,只需要在变量定义的时候改就可以了,这样比较方便。

🥥$@和$^的使用:

$@:表示所有的目标文件。

$^:表示所有的依赖文件。

如果有很多依赖文件时,我们就可以使用这个。这样在依赖方法中就不要写那么多的文件。

如下:

$@代表test

$^代表test.cpp

🍉四.对于伪文件和时间戳的理解:

伪文件:

🌽用途:

伪文件不会真正生成一个文件,伪目标文件一般用于对文件清理,安装,测试等用途。 

🌽定义方法:

.PHONY:文件名称

这样就可以定义一个伪文件。


时间戳:

🌽查看文件的时间戳 :

stat   文件名称

可以查看文件的时间戳。

每个文件都会有时间戳这个属性,一切皆文件。

依赖文件和目标文件也会有时间戳。

make有一个特点,如果目标文件的时间戳比依赖文件新,就是时间在依赖文件后面,就不会新生产目标文件,而是提示up  to data

这样的情况下,test的时间在test.cpp后面,就不会执行依赖方法。

相反伪文件不会生成真的文件,所以不会出现这种情况,可以一直执行make。

例如 :

只是到后面不会做什么事情而已。

🍉小测试:

我们可以用touch -m 指令更新时间戳,来判断是不是真的是根据时间戳来判断是否新生成目标文件。

从上面的例子我们就可以看出,在我们更新时间以后,又重新执行了g++ -o test test.cpp

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

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

相关文章

【我的 PWN 学习手札】House Of Karui —— tcache key 绕过手法

目录 前言 一、House of Karui 二、测试与模板 前言 早期版本的 tcachebin 由于毫无保护,导致攻击利用非常容易,成为重灾区。tcache dup,也即 tcachebin 中的 double free 利用手法,是攻击者常常选用的攻击方式。然而&#xf…

直通滤波-PassThrough Filter-原理-代码实现

前言 对坐标轴上的上下限进行约束,选取其中符合范围的点云区域使用场景:去除噪声点,关注特定区域,减小计算量 工作流程 假设我们要在 d d d 轴( d ∈ { x , y , z } d \in \{x, y, z\} d∈{x,y,z} )上…

【电路笔记】-运算放大器积分器

运算放大器积分器 文章目录 运算放大器积分器1、概述2、运算放大器积分器的表示2.1 理想积分器2.2 交流响应2.3 输出公式3、限制4、总结1、概述 在我们之前与运算放大器相关的大多数文章中,配置都是基于带有电阻器作为反馈环路、分压器或互连许多运算放大器的一部分的放大器。…

Redis数据结构之String字符串

二.String字符串 redis中的所有key都是字符串类型,只不过是value类型有差异。 redis中的字符串,直接就是按照二进制的方式存储的(不会做任何的编码转换(就好像mysql,它默认的字符集是拉丁文,插入中文就会…

Linux 基础IO 2

读取与写入 read与fread 在基础IO 1中我们学会了open和fopen的函数这两个函数是用于为进程打开文件也可以理解为为进程和文件建立了一个链接使其可以交互。那我们建立号链接之后肯定还是需要对文件进行操作,现在我们先来了解读取操作。 read: 这是一…

Leetcode面试经典150题-94.二叉树的中序遍历

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2: 输入:root [] 输出:[]示例 3: 输入:root [1] 输出&am…

SOMEIP_ETS_120: SD_Initial_Events_after_Subscribe_with_alternate_IPs

测试目的: 验证DUT在接收到Tester的SubscribeEventgroup消息后,能够向Tester指定的IP地址和端口发送SubscribeEventgroupAck确认消息以及对应的初始化字段。 描述 本测试用例旨在确保DUT能够正确处理SubscribeEventgroup消息,并按照消息中…

基于SpringBoot+Vue的健身房管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

自动化直播的未来:2024年必试的10款自动直播App曝光,教你轻松玩转直播!

自动化直播的未来:2024年必试的10款自动直播App曝光,教你轻松玩转直播! 随着人工智能技术的飞速发展,自动化直播已经成为当下最热门的趋势之一。2024年,众多创新的AI自动直播App如雨后春笋般涌现,它们不仅…

IO流中的异常捕获

Java简化 接口AutoCloseable

unity3d入门教程九

unity3d入门教程九 20.2播放音频20.3在代码中播放21.1延时调用21.2invoke API21.3消息调用22.1交互界面22.2添加canvas22.3canavas的位置22.4添加text 这里给一个资源网站,可以部分免费下载,音乐和音效超多,支持检索 爱给网 https://www.aige…

【Delphi】创建应用程序和 LiveBindings示例(FMX)

一、创建一个FMX程序 界面上放置上如下3个控件:TProgressBar1, TArcDial1,TTrackBar1。 二、打开LiveBindings Designer 设计器 三、在 LiveBindings Designer 中,您的绑定图只包含对象,您可以将它们连接起来。 四、在设计器中,在…

idea 恢复 pom 文件呈现灰色并带删除线

今天在 idea 中导入别人的项目时发现有几个 pom 文件是灰色的并带删除线。 可以用以下方式解决: 打开file - settings - build,execution,deployment - Build Tools - Maven - Ignored Files 把 pom.xml 前面的复选框去掉,去掉之后,点击 appl…

Kerberos自我总结Kerberos自我总结

1、协议原理与漏洞产生 1.1 kerberos Kerberos协议是一种基于票据Ticket的认证方式,它由三个角色组成,分别是客户端Client、服务端Server和秘钥分发中心KDC。 协议中的交互分为六步,为AS_REQ、AS_REP、TGS_REQ、TGS_REP、AP_REQ和AP_REP …

【Linux】进程地址空间和进程调度队列

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12625432.html 目录 问题现象 进程地址空间 进一步理解 地址空间 Linux2.6内核进程调度队列 …

C++——string的了解和使用

目录 引言 为什么要学习string 1.C语言中的字符串 2.C中的字符串 auto和范围for 1.auto 1.1 auto的介绍 1.2 注意事项 2.范围for 标准库中的string类 1.string类的迭代器 1.1 begin()与end()函数 1.2 rbegin()与rend()函数 2.string类的初始化和销毁 3.string类…

【线程】线程的控制

本文重点:理解线程控制的接口 前言 内核中是没有很明确线程的概念的,只有轻量级进程的概念,不会提供直接给我们线程的系统调用,而会给我们提供轻量级进程的系统调用。我们用户是需要线程的接口的,在应用层&#xff0…

java重点学习-总结

十五 总结 https://kdocs.cn/l/crbMWc8xEZda (总结全部的精华) 1.面试准备 企业筛选简历规则简历编写注意事项(亮点)项目怎么找,学习到什么程度面试过程(表达结构、什么样的心态去找工作) 2.redis 缓存相关(缓存击穿、穿透、雪崩、缓存过期淘…

智能自行车码表:基于2605C语音芯片的创新开发方案

一、开发背景 随着科技的飞速发展和人们对健康生活的追求,自行车骑行已成为一种广受欢迎的绿色出行方式。智能自行车码表作为骑行者的得力助手,不仅记录骑行数据,还逐渐融入了更多智能化功能。然而,传统码表在语音提示、多语种支持…

Science Robotic 内在触觉实现直观的物理人机交互

触觉传感器和电子皮肤是为机器人提供物理交互感的常见设备,但当用于机器人的大面积覆盖时,它们会变得复杂且昂贵。德国宇航中心近期发表的Science Robotics研究工作,使用内部高分辨率关节力扭矩传感器,在机械臂中实现了固有的全身…