Linux环境基础开发工具的使用(三)

news2025/2/23 19:24:00

五、Linux项目自动化构建工具-make/Makefile

make:是一条指令。

makefile:是一个当前目录下的文件。

image-20241216211116849

第一行:依赖关系。

第二行:依赖方法。

clean是空依赖关系。

image-20241216211022986

编译文件清理

image-20241216211216667

背景

会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,

makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,

甚至于进行更复杂的功能操作。

makefile带来的好处就是——“自动化编译”,一旦写好,

只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

make是一个命令工具,是一个解释makefile中指令的命令工具,

一般来说,大多数的IDE都有这个命令,

比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。

可见,makefile都成为了一种在工程方面的编译方法。

make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

理解

依赖关系、依赖方法

先找makefile文件,在makefile文件种找依赖关系和依赖方法,根据源文件帮我们形成对应的目标文件。

image-20250129203257669

mycode是依赖关系的目标文件

mycode依赖mycode.c这个源文件

gcc -o mycode mycode.c这个叫做依赖方法


image-20250129204801132

image-20250129205028949

makefile的自动化推导(栈式结构)

形成mycode就要先形成mycode.o

形成mycode.o就要先形成mycode.s

形成mycode.s就要先形成mycode.i

形成mycode.i就要先找到mycode.c

这个顺序与输入顺序无关。


是否能重新make

(在不修改源代码的基础上)为什么只能make一次

因为源文件没修改,形成的目标文件内容不需要(没有必要)再更新。提高编译效率。

image-20250129212957604

image-20250129212516341


修改源代码可以重新make

image-20250129213357580

修改前:

image-20250129213251255

修改后:

image-20250129213316943


怎么做到的?(怎么知道我当前的文件要不要被编译)

一定是源文件形成可执行文件的,先有源文件,再有可执行文件。

一般而言,源文件的修改时间 比 形成可执行文件的时间要 老。

如果我们修改了源文件,历史上还有可执行文件,那么源文件最近修改时间 比 可执行文件形成时间要 新。

how:

只需要比较可执行程序的最近修改时间 和 源文件的最近修改时间

.exe 新于 .c 源文件是老的,不需要重新编译。

image-20250129222056917

.exe 老于 .c 源文件是新的,需要重新编译。

image-20250129222123502

一般而言:.exe 形成时间 与 .c 最近修改时间 一般不会一样。

一般比较modify时间即可(对modify时间有疑问的同学,移步至“补充stat”)

结论:make会根据源文件和目标文件的新旧,判定是否需要重新执行依赖关系进行编译!(不一定总是执行)


如果想让对应的依赖关系总是执行呢?

.PHINY:伪目标 -> 总是被执行

image-20250129222640803

image-20250129222709349


如何清理

clean是空依赖关系

image-20250129211143941

image-20250129211239134


一般是让clean作为伪目标,总是被执行。

image-20250129222940087

image-20250129223040796


如果把clean放在最前面,则使用make命令默认执行第一行

image-20250129211623869

image-20250129211656511

所以不建议把清理放在最前面

make后面直接跟目标文件:指定名称 执行该目标文件的依赖关系与依赖方法

特殊符号

$@是目标文件 也就是冒号左边的

$^是源文件 也就是冒号右边的

image-20250203133315879

在编译的时候,$@、$^会回现出来

image-20250203133527037

如果不想让它回现出来,就在前面加上@

image-20250203134248743

image-20250203134335959


补充

stat

显示时间

文件=文件内容+文件属性

修改文件内容:

image-20250129213316943

image-20250129220408712

image-20250129220319540

修改文件属性:

image-20250129220704457

要把时间都修改成最近的时间

image-20250129221309088

修改access时间为最近时间

image-20250129221408404


六、使用git 命令行

git具有网络功能的版本控制器,是开源的,客户端和服务端是一体的。

安装 git
yum install git

已经下载好了是这样的

image-20250219212014695

git版本

image-20250219212116979

Github 创建项目

使用 Github 创建项目

注册账号

这个比较简单, 参考着官网提示即可. 需要进行邮箱校验.

创建项目

  1. 登陆成功后, 进入个人主页, 点击左下方的 New repository 按钮新建项目

  2. 然后跳转到的新页面中输入项目名称(注意, 名称不能重复, 系统会自动校验. 校验过程可能会花费几秒钟). 校验

完毕后, 点击下方的 Create repository 按钮确认创建.

  1. 在创建好的项目页面中复制项目的链接, 以备接下来进行下载.

下载项目到本地

创建好一个放置代码的目录.

这里的 url 就是刚刚建立好的 项目 的链接.

image-20250219212833532

image-20250219213201845

这个.git就是本地仓库

image-20250219213304786

git中的隐藏目录

image-20250219213446334

将代码克隆到了本地中,但是没有被仓库管理起来

image-20250219214049958

三板斧第一招: git add

将代码放到刚才下载好的目录中

git clone [url]

将需要用 git 管理的文件告知 git

三板斧第二招: git commit

提交改动到本地

最后的 "." 表示当前目录

提交的时候应该注明提交日志, 描述改动的详细内容.

三板斧第三招: git push

同步到远端服务器上

需要填入用户名密码. 同步成功后, 刷新 Github 页面就能看到代码改动了.

image-20250219222237377

image-20250219222256729

配置免密码提交

git本地免密码和账号pull、push_没有git账号怎么拉代码-CSDN博客

git add [文件名]

git commit .

git push

其他问题

git首次使用需要配置邮箱和用户名

image-20250219220601327

image-20250219220845054

why?

对代码进行溯源


要开源或者删除仓库 该怎么办?

image-20250219221413309

image-20250219221426078


.gitignore问题

在这里的后缀将不会上传至远端

image-20250219223854698

image-20250219224132342

image-20250219224950887

image-20250219225054080

最终只有.ppp的成功上传,同时,.gitignore也改变了

image-20250219225158413

查看提交记录

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

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

相关文章

electron提升软件运行权限,以管理员权限运行

大家有任何想法,都可以联系博主沟通。 本系列为实战文章,最终实现的桌面工具软件,获取方式:百度网盘地址:https://pan.baidu.com/s/1yrl0jYpti7QCn8CHBRT2lw?pwd1234 正文开始 前言一、提升electron运行权限的三种方…

安科瑞能源物联网平台助力企业实现绿色低碳转型

安科瑞顾强 随着全球能源结构的转型和“双碳”目标的推进,能源管理正朝着智能化、数字化的方向快速发展。安科瑞电气股份有限公司推出的微电网智慧能源管理平台(EMS 3.0),正是这一趋势下的创新解决方案。该平台集成了物联网&…

Spring Boot 中使用 @Transactional 注解配置事务管理

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污…

动态链接器(九):.init和.init_array

ELF文件中的.init和.init_array段是程序初始化阶段的重要组成部分,用于在main函数执行前完成必要的初始化操作。 1 .init段和.init_array 段 1.1 作用 .init段包含编译器生成的初始化代码,通常由运行时环境(如C标准库的启动例程&#xff0…

RT-Thread+STM32L475VET6——TF 卡文件系统

文章目录 前言一、板载资源二、具体步骤1.打开CubeMX进行USB配置1.1 使用外部高速时钟,并修改时钟树1.2 打开SPI1,参数默认即可(SPI根据自己需求调整)1.3 打开串口,参数默认1.4 生成工程 2.配置SPI2.1 打开SPI驱动2.2 声明使用SPI…

[论文解析]OmniRe: Omni Urban Scene Reconstruction

OmniRe: Omni Urban Scene Reconstruction 论文地址:https://arxiv.org/abs/2408.16760 代码地址:https://github.com/ziyc/drivestudio 项目地址:https://ziyc.github.io/omnire/ 论文解读 总结 这篇论文代表了一种重建的方向&#xff0…

【微服务优化】ELK日志聚合与查询性能提升实战指南

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…

Docker实战-使用docker compose搭建博客

docker run 部署 创建blog网络 [rootk8s-master ~]# docker network create blog 8f533a5a1ec65eae3f98c0ae5a76014a3ab1bf3c087ad952cdc100cc7a658948 [rootk8s-master ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 8f533a5a1ec6 blog bridge …

【JT/T 808协议】808 协议开发笔记 ② ( 终端注册 | 终端注册应答 | 字符编码转换网站 )

文章目录 一、消息头 数据1、消息头拼接2、消息 ID 字段3、消息体属性 字段4、终端手机号 字段5、终端流水号 字段 二、消息体 数据三、校验码计算四、最终计算结果五、终端注册应答1、分解终端应答数据2、终端应答 消息体 数据 六、字符编码转换网站 一、消息头 数据 1、消息头…

51单片机学习之旅——定时器

打开软件 1与其它等于其它,0与其它等于0 1或其它等于1,0或其它等于其它 TMODTMOD&0xF0;//0xF01111 0000进行与操作,高四位保持,低四位清零,高四位定时器1,低四位定时器0 TMODTMOD|0x01;//0x010000 0…

hot100_139. 单词拆分

hot100_139. 单词拆分 思路 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入:…

SQLMesh 系列教程7- 详解 seed 模型

SQLMesh 是一个强大的数据建模和管道管理工具,允许用户通过 SQL 语句定义数据模型并进行版本控制。Seed 模型是 SQLMesh 中的一种特殊模型,主要用于初始化和填充基础数据集。它通常包含静态数据,如参考数据和配置数据,旨在为后续的…

windows11那些事

一.windows11简介 Windows11是‌微软公司于2021年发布的桌面端操作系统,它带来了许多新的功能和改进,旨在提升用户体验和工作效率。以下是一些关于Windows 11的基础知识和使用技巧: ‌‌通用搜索:通过任务栏上的搜索或按Windows…

VividTalk:南京大学、阿里巴巴等机构联合研发的开源3D说话人生成框架

目录 一、前言二、项目概述三、技术架构四、优势特点五、性能评估六、应用场景七、结论与展望 一、前言 在当今人工智能飞速发展的时代,人机交互的方式正不断创新和优化。VividTalk作为南京大学、阿里巴巴、字节跳动和南开大学联合开发的一项开创性技术&#xff0c…

pyside6学习专栏(三):自定义QLabel标签扩展类QLabelEx

标签是界面设计中最常用的控件,本文演示了如何基于PySide6的QLabex控件类扩展定义QLabelEX类,以实现更少的编码完成各种图像、彩色文本、动画的加载和显示,丰富界面显示 本示例演示了QLabel和其扩展类QLabelEx分别显示文本、图像、动画的使用…

后“智驾平权”时代,谁为安全冗余和体验升级“买单”

线控底盘,正在成为新势力争夺下一个技术普及红利的新赛点。 尤其是进入2025年,比亚迪、长安等一线传统自主品牌率先开启高阶智驾的普及战,加上此前已经普及的智能座舱,舱驾智能的「科技平权」进一步加速行业启动「线控底盘」上车窗…

springboot408-基于Java的樱洵宾馆住宿管理系统(源码+数据库+纯前后端分离+部署讲解等)

💕💕作者: 爱笑学姐 💕💕个人简介:十年Java,Python美女程序员一枚,精通计算机专业前后端各类框架。 💕💕各类成品Java毕设 。javaweb,ssm&#xf…

EasyRTC:基于WebRTC与P2P技术,开启智能硬件音视频交互的全新时代

在数字化浪潮的席卷下,智能硬件已成为我们日常生活的重要组成部分,从智能家居到智能穿戴,从工业物联网到远程协作,设备间的互联互通已成为不可或缺的趋势。然而,高效、低延迟且稳定的音视频交互一直是智能硬件领域亟待…

鸿蒙NEXT应用App测试-通用测试

注意:大家记得学完通用测试记得再学鸿蒙专项测试 https://blog.csdn.net/weixin_51166786/article/details/145768653 注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得博主文章…

transfmer学习认识

整体架构 1.自注意机制 1.1.softmax 在机器学习和深度学习中,softmax 函数是一个常用的激活函数,用于将一个向量转换为一个概率分布。softmax 函数的公式如下: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/35c158988402498ba6…