【Hello Linux】Linux工具介绍 (make/makefile git)

news2024/11/30 10:39:51

作者:@小萌新
专栏:@Linux
作者简介:大二学生 希望能和大家一起进步!
本篇博客简介:介绍Linux的常用工具make/makefile git

Linux项目自动化构建工具 – make/Makefile

背景

  • 会不会写Makefile 从侧面说明了一个人是否具备完成大型工程的能力
  • 一个工程的源文件不计其数 按照其类型、功能、模块分别放在若干个目录当中 Makefile定义了一系列的规则来指定:哪些文件需要先编译 哪些文件需要后编译 甚至于进行更复杂的功能操作
  • Makefile带来的好处就是“自动化编译” 一旦写好 只需一个make命令 整个工程完全自动编译 极大的提高了软件开发的效率
  • make是一个命令工具 是一个解释Makefile当中指令的命令工具 一般来说 大多数的IDE都有这个命令 例如:Delphi的make VisualC++的nmake Linux下GNU的make 可见 Makefile都成为了一种在工程方面的编译方法
  • make是一条命令 Makefile是一个文件 两个搭配使用 完成项目自动化构建

依赖关系和依赖方法

在使用make/Makefile前我们首先应该理解各个文件之间的依赖关系以及它们之间的依赖方法

依赖关系: 文件A的变更会影响到文件B 那么就称文件B依赖于文件A

在这里插入图片描述

比如说我们这里的test.c文件 只要它改变了的话 test.i test.s test.o 可执行文件都会发生变化

所以我们说后面的这些文件是依赖于test.c的

当然如果要是进一步细分的话 我们还可以说 test.s 是依赖于 test.i的

test.o是依赖于 test.s的 依次类推

依赖方法: 如果文件B依赖于文件A 那么通过文件A得到文件B的方法 就是文件B依赖于文件A的依赖方法

在这里插入图片描述

在上面这个图中 test.c经过某种方法变成了 test.i

那么我们就可以说这个方法是依赖方法

多文件编译

当我们的工程中有多个源文件的时候我们应该怎么进行多文件编译呢?

有两种方法

第一种 我们可以直接使用gcc对两个文件进行编译 生成一个可执行文件

指令如下

  gcc main.c test.c -o mytest.c

在这里插入图片描述
但是我们一般不这么做 因为一旦多个源文件中有一个改变了我们就需要将所有的源文件重新编译链接

第二种 每个源文件各自生成自己的二进制文件 然后再将这些二进制文件通过链接生成可执行程序

这样子就算是一个源文件需要修改我们只需要重新编译它的二进制文件就好了

指令表示如下

  gcc -c main.c -o main.o
  gcc -c test.c -o test.o

在这里插入图片描述

之后我们将这两个二进制文件链接即可

指令如下

  gcc test.o main.o -o mytest

这里有一个注意点 我们链接的时候并不需要主动去链接头文件 因为编译器会自动识别我们使用#include 包含的头文件

随着源文件的增多 我们每次需要敲的指令就会变得很长 为了方便我们的操作我们这里就可以使用 make/makefile了

首先我们需要在源文件所在目录下创建一个名为Makefile/makefile的文件

在这里插入图片描述

之后我们便可以开始编写makefile文件了

在这里插入图片描述
之后我们便可以开始使用make进行编译

在这里插入图片描述
我们发现这里成功生成了可执行文件和中间的二进制文件

Makefile文件的简写方式:

  • $@:表示依赖关系中的目标文件(冒号左侧)
  • $^:表示依赖关系中的依赖文件列表(冒号右侧)
  • $<:表示依赖关系中的第一个依赖文件

在这里插入图片描述

在这里插入图片描述

项目清理

每次运行结束之后都要我们手动清理未免有点太麻烦了 刚好我的makefile支持这个功能

它的语法格式是这样子的

在这里插入图片描述
首先需要写下这样一段代码

.PHONY:clean
clean:

.PHONY修饰后面的东西我们一般把他称为伪目标

什么是伪目标呢?

伪目标就是总是可以被执行的目标

后面的就是编写这个伪目标了

make原理

  1. make会在当前目录下找名字为“Makefile”或“makefile”的文件
  2. 如果找到 它会找文件当中的第一个目标文件 在上面的例子中 它会找到mytest这个文件 并把这个文件作为最终的目标文件
  3. 如果mytest文件不存在 或是mytest所依赖的后面的test.o文件和main.o文件的文件修改时间比mytest文件新 那么它就会执行后面的依赖方法来生成mytest文件
  4. 如果mytest所依赖的test.o文件不存在 那么make会在Makefile文件中寻找目标为test.o文件的依赖关系 如果找到则再根据其依赖方法生成test.o文件(类似于堆栈的过程)
  5. 如果test.c文件和main.c文件是存在的 make会生成test.o文件和main.o文件 然后再用test.o文件和main.o文件生成最终的mytest文件
  6. make会一层又一层地去找文件的依赖关系 直到最终编译出第一个目标文件
  7. 在寻找的过程中 如果出现错误 例如最后被依赖的文件找不到,那么make就会直接退出 并报错

Linux版本控制工具 --git

git的介绍

git是一个分布式版本控制系统 它可以快速高效地处理从小型到大型的各种项目

它的作用有

  • 能够记录文档的改动历史
  • 能够回滚到任意一个修改时间点
  • 能够协作编辑文件

git的安装

在下载之前我们可以通过 --version指令来查看自己的云服务器上是否安装了git

在这里插入图片描述
如果自己的云服务器上没有安装git那我们则需要通过下面的命令来安装

  sudo yum install -y git

git的使用

我们可以使用git来克隆一个代码仓库

首先我们可以在gitee上建立一个代码仓库

具体教程在bilibili很简单可以搜索到

在创建了一个新的代码仓库之后我们可以获取这个仓库的https链接

在这里插入图片描述
之后我们可以在linux中新建一个目录作为我们的代码仓库

在这里插入图片描述
我们创建完“仓库” 之后进入之

输入指令 git clone + https网址

在这里插入图片描述
之后我们就在gitee下克隆出来一个新的代码仓库啦

我们可以看到本地的仓库和gitee上仓库是一样的
在这里插入图片描述

在这里插入图片描述

那么如何上传我们的本地文件到gitee上的代码仓库呢?

只需要按照下面的三步走就可以实现上传功能

add

首先我们创建一个test目录作测试用

之后输入如下指令

 git add test

在这里插入图片描述

它的意思是上传test文件

commit

之后我们需要commit确认我们上传的文件并且要添加日志

输入如下指令即可

 git commit -m “log”

其中log代表的是本次提交的日志信息

当我们第一次提交的时候会出现这样子的报错
在这里插入图片描述
这是因为git需要确认我们的身份

这个时候按照它给我们的报错信息 输入我们的邮箱和姓名即可

在这里插入图片描述
push

最后我们可以通过push指令来讲确认后的命令上传到gitee仓库

在这里插入图片描述
当然最后我们需要输入下自己的账号和密码 这样子的设计也是很合理的

避免了有人在只知道你邮箱的情况下上传一些无关文件到你的仓库

之后我们在test空目录中加上文件再次完成这一套操作

在这里插入图片描述
我们可以发现确实同步了

git上传的文件应该如何删除呢?

git的删除和git的添加很像

我们只需要多加一步操作

git rm “xxx”

在这里插入图片描述
之后再重复 add commit push就可以了

在这里插入图片描述
我们可以发现文件确实被删除了

我们怎么查看历史提交呢?

我们只需要输入 git log指令 就能够查看之前所有提交的日志

在这里插入图片描述

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

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

相关文章

Spring Cloud微服务网关Gateway组件

目录 网关简介 什么是Spring Cloud Gateway Spring Cloud Gateway 功能特征 核心概念 工作原理 Spring Cloud Gateway快速开始 环境搭建 集成Nacos 路由断言工厂&#xff08;Route Predicate Factories&#xff09;配置 自定义路由断言工厂 过滤器工厂&#xff08; …

window 配置深度学习环境GPU

CUDA 11.6 CUDNN Anaconda pytorch 参考网址&#xff1a;https://zhuanlan.zhihu.com/p/460806048 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com) 电脑信息 RTX 2060 GPU0 1. CUDA 11.6 1.1 确认信息 C:\Users\thzn>nvidia-smi &#xff08;CUDA Versi…

秒杀项目之消息推送

目录一、创建消费者二、创建订单链路配置2.1 定义RabbitMQ配置类2.2 创建RabbitmqOrderConfig配置类三、如何实现RabbitMQ重复投递机制3.1 开启发送者消息确认模式3.2 消费发送确认3.2.1 创建ConfirmCallBack确认模式3.2.2 创建ReturnCallBack退回模式3.3 创建生产者3.4 创建消…

金三银四必看软件测试面试题,上百家公司面试都是这些套路

自我介绍说一下测试用例嗯&#xff0c;做测试&#xff0c;好多时间是在琢磨分析测试用例怎么去写&#xff0c;这个每个公司规范可能不太一样&#xff0c;但是大致思想是一致的。都是想要通过测试用例&#xff0c;把每一个分析到位&#xff0c;进行测试。就拿我上家公司来说吧&a…

数据库(2)--加深对统计查询的理解,熟练使用聚合函数

一、内容要求 利用sql建立学生信息数据库&#xff0c;并定义以下基本表&#xff1a; 学生&#xff08;学号&#xff0c;年龄&#xff0c;性别&#xff0c;系号&#xff09; 课程&#xff08;课号&#xff0c;课名&#xff0c;学分&#xff0c;学时&#xff09; 选课&#xff0…

融云入围「2022 云办公平台 TOP50」,进入「中国协同办公产业图谱」

2 月 10 日&#xff0c;中国科学院旗下《互联网周刊》颁布“2022 云办公平台 TOP50”&#xff0c;融云荣登榜单。 2 月 13 日&#xff0c;艾瑞咨询发布《2023 年中国协同办公行业研究报告》&#xff08;下简称《报告》&#xff09;&#xff0c;对协同办公行业的供需动态和迭代方…

黑马】后台管理-项目优化和上线

一。项目优化优化1&#xff0c;加载进度条显示安装一个运行依赖&#xff0c;nprogress然后导包&#xff0c;调用对象展示和隐藏在main中基于拦截器实现展示进度条和隐藏进度条的效果如果触发请求拦截器&#xff0c;证明发起请求&#xff0c;希望展示进度条&#xff0c;如果触发…

消防应急照明和疏散指示系统——集中控制型系统的设计与应用

安科瑞 李亚俊 V:Acrel8757 摘要&#xff1a;伴随着建筑领域的良好发展&#xff0c;建筑工程建设越来越复杂&#xff0c;相应的消防配套设施也越来越先进&#xff0c;火灾发生时&#xff0c;人在燃烧产生的噪音和烟气中会产生恐惧、不安等不良的心理状态&#xff0c;进而影响他…

NLP篇章2:理解Transformer

Transformer编码&#xff0c;解码大的结构的理解 编码部分&#xff0c;每一个的小编码器的输入是前一个小编码器的输出&#xff0c; 而每一个小解码器的输入不光是它的前一个解码器的输出&#xff0c;还包括了整个编码部分的输出。 self-attention 自注意力机制 顾名思义就是…

【数据库】 MySQL备份恢复

目录 MySQL日志管理 一&#xff0c; MySQL日志类型 二&#xff0c;错误日志 三&#xff0c; 通用查询日志 四&#xff0c; 慢查询日志 五&#xff0c;二进制日志 1&#xff0c;开启日志 2&#xff0c;二进制日志的管理 3&#xff0c;日志查看 5&#xff0c;二进制日志还原数据…

MAC OSX安装Python环境 + Visual Studio Code

MAC上开发python怎么能少得了python3环境呢&#xff0c;而安装python3环境的方式也有多种&#xff0c;这里仅选用并记录本人认为比较方便的方式 安装Homebrew Homebrew是macOS 缺失的软件包管理器&#xff0c; 使用它可以在MAC上安装很多没有预装的东西&#xff0c;详细说明可…

上海霄腾自动化装备盛装亮相2023生物发酵展

上海霄腾自动化携液体膏体粉剂颗粒等灌装生产线解决方案亮相2023生物发酵展BIO CHINA2023生物发酵展&#xff0c;作为生物发酵产业一年一度行业盛会&#xff0c;由中国生物发酵产业协会主办&#xff0c;上海信世展览服务有限公司承办&#xff0c;2023第10届国际生物发酵产品与技…

SAS应用入门学习笔记5

input 操作符&#xff1a; 代码说明&#xff1a; 1&#xff09;1 表示第1列字符&#xff1b;7表示第7列字符&#xff1b; 2&#xff09;col1 表示第一列数据&#xff1b;col2 表示第二列数据&#xff1b; 3&#xff09;4.2 表示的是4个字符&#xff0c;2表示小数点后两位&a…

Hazel游戏引擎(005)

本人菜鸟&#xff0c;文中若有代码、术语等错误&#xff0c;欢迎指正 我写的项目地址&#xff1a;https://github.com/liujianjie/GameEngineLightWeight&#xff08;中文的注释适合中国人的你&#xff09; 文章目录前言关键操作代码文件关键代码代码流程代码文件关键代码exter…

5、MyBatis框架——Mapper接口映射、给类起别名、MyBatis开启驼峰映射、MyBatis开启日志打印

目录 一、Mapper接口映射 1、创建数据库 2、搭建MVC分层结构 3、配置MyBatis全局参数 4、编辑DAO层接口 5、配置Mapper文件与DAO层绑定 &#xff08;1&#xff09;配置Mapper文件 &#xff08;2&#xff09;DAO层与Mapper文件标签的快速生成 6、代码测试 二、给类起别…

python|第四章考试题及练习题

本篇文章是对北京理工大学嵩天老师的《Python语言程序设计》第四章考试题及练习题的学习记录。 一、考试题 1、四位玫瑰数 问题描述&#xff1a; 四位玫瑰数是4位数的自幂数。自幂数是指一个 n 位数&#xff0c;它的每个位上的数字的 n 次幂之和等于它本身。‪‬‪‬‪‬‪‬…

【云原生-Docker】docker容器自定义DNS解析

描述 在特定的情况下&#xff0c;或者在网络策略特殊定义下&#xff0c;需要自定义dns进行域名访问&#xff0c;在宿主机上配置了域名解析&#xff0c;对于docker容器无效。对于局域网内的域名解析&#xff0c;Docker 需要到 Docker 容器中配置 hosts 文件。 实现方式 docke…

使用Pandas也可以进行数据可视化

数据可视化是数据分析的一个重要方面&#xff0c;它提供了一种理解数据并从中得出有意义见解的方法。Pandas 是最常见的于数据分析的 Python 库&#xff0c;它基于Matplotlib扩展了一些常用的可视化图表&#xff0c;可以方便的调用&#xff0c;本篇文章就让我们看看有哪些图表可…

使用JavaScript+Selenium玩转Web应用自动化测试

自动化测试 在软件开发过程中, 测试是功能验收的必要过程, 这个过程往往有测试人员参与, 提前编写测试用例, 然后再手动对测试用例进行测试, 测试用例都通过之后则可以认为该功能通过验收. 但是软件中多个功能之间往往存在关联或依赖关系, 某一个功能的新增或修改可能或影响到…

牛客网Python篇数据分析习题(四)

1.现有一个Nowcoder.csv文件&#xff0c;它记录了牛客网的部分用户数据&#xff0c;包含如下字段&#xff08;字段与字段之间以逗号间隔&#xff09;&#xff1a; Nowcoder_ID&#xff1a;用户ID Level&#xff1a;等级 Achievement_value&#xff1a;成就值 Num_of_exercise&a…