Linux基础——Linux开发工具(make/makefile,git)

前言:在经过前面两篇学习,大家对Linux开发工具都有一定的了解,而在此之前最重要的两个工具就是vim,gcc。


如果对这两个工具不太了解,可以先阅读这两篇文章:
Linux开发工具 (vim)
Linux开发工具 (gcc/g++)


在这里插入图片描述


首先让我们来初步了解一下本篇的目标:
1. 学习make/makefile,并能简单使用
2. 学习git使用,并能简单使用

在这里插入图片描述

本篇主要内容
Linux项目自动化构建工具 - make/Makefile
git仓库管理 - git

在这里插入图片描述


Linux开发工具

  • 1. Linux项目自动化构建工具 - make/makefile
    • 1.1 make/makefile的背景
    • 1.2 make/makefile简介
    • 1.3 伪目标
    • 1.4 文件的三个属性
    • 1.5 makefile的依赖关系
  • 2. git的简单介绍以及使用
    • 2.1 git的简单介绍
    • 2.1 git的三板斧
      • git add
      • git commit
      • git push
  • 3. 总结

1. Linux项目自动化构建工具 - make/makefile

1.1 make/makefile的背景

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

如果在Linux下编程需要频繁的编译和删除时,这会使我们的效率变得很低下,所以我们学习自动化构建代码


1.2 make/makefile简介

make是一条命令,makefile是一个文件!!!

makefile文件的内容需要我们自己编写,而make则是启动makefile的钥匙

让我们来简单创建编写一个makefile。
在这里插入图片描述

在这里插入图片描述

这就完成了一个简单的makefile文件,包含了编译和删除功能


我们用vim编写一下test.c
在这里插入图片描述
在编写完成,保存退出后,我们实现自动化构建代码只要:

指令:make

在这里插入图片描述
如果想执行删除功能,我们只要:

指令:make clean

在这里插入图片描述


那为什么形成可执行程序可以直接用make,但是删除不行呢?
在上面编写的Makefile中

指令:makemake mytest执行后的结果是一样的

在这里插入图片描述

因为直接使用make时,会从上到下扫描makefile文件,扫描到第一个目标文件,就会执行它,所以makefile文件中的第一个指令是可以直接使用make执行,但是注意后面的指令,make后面必须要跟特定的指令

例如:
在这里插入图片描述
如果我们这样编写Makefile那直接使用make将会怎么执行
在这里插入图片描述
此时,make的功能将不再是生成可执行程序


1.3 伪目标

我们来看以下代码
在这里插入图片描述
发现clean是被.PHONY修饰的,而.PHONY是将clean指令修饰成了伪目标。


伪目标又是什么呢?

当我们短时间内多次make时:
在这里插入图片描述

我们只有第一次使用make时,程序执行了,但是当我们使用.PHONY修饰的clean时,每一次都可以成功执行

因此我们可以知道:

  • 伪目标是总是被执行的
  • make和makefile总是不让重新编译代码

1.4 文件的三个属性

我们先了解以下系统为什么要在第二次make的时候将我们的请求给拒绝:

  • 从效率上来看:文件在第二次make的时候并没有被修改,所以系统为了提高效率而拒绝make

系统怎么知道我们的文件是否进行了修改?

通过一个文件修改的时间

  • 第一次的时候,一定是先有源文件,才有可执行文件
    源文件的修改时间<可执行文件的修改时间
  • 第二/n次的时候,我们对源文件做任何修改的时候
    源文件的修改时间>可执行文件的修改时间
  • 编译重新生成可执行

我们可以直接查看文件的属性:
指令:stat 文件名

stat指令既可以查看源文件属性,也可以查看可执行程序的属性
在这里插入图片描述

我们总是说 文件 = 内容+属性

红框里面的三个属性都是表示文件的时间,但是每一个表示的含义都不一样,让我来简单介绍一下
在这里插入图片描述

在每次做出对应操作之后相应时间都会改变

注意:access时间不是实时更新的
在这里插入图片描述

因此系统通过时间的对比不让我们频繁的进行编译代码操作,而伪目标的作用就是强制执行指令


1.5 makefile的依赖关系

make/makefile兼具推导能力

比如:我们可以写下以下程序
在这里插入图片描述
在这里插入图片描述

可执行程序mytest的生成依赖.o文件但是此时没有.o文件
就会执行下一条指令,但是.o文件依赖的是.s文件,系统中此时没有.s文件
又需要往下继续寻找,在找到系统内包含的.c文件时,程序将会执行回去

以此可以验证make/makefile的推导能力


makefile中可以自定义变量
在这里插入图片描述
在自定义变量时,我们需要使用$()将变量修饰。
在这里插入图片描述
同样生成了可执行程序


makefile文件还可以进行简写

Makefile文件的简写方式:

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

在这里插入图片描述

$@表示:mytest
$^表示:test.c

如果不想指令打印在显示器上我们可以在对应行前面加:@
在这里插入图片描述
在这里插入图片描述
此时删除时的提示被隐藏


2. git的简单介绍以及使用

2.1 git的简单介绍

git是一种代码管理器,git程序与Linux系统的是一家人,因此Linux与gitee或GitHub之间有一定联系

首先我们需要在gitee上有一个远端仓库,创建完成后,在管理仓库里设置开源
在这里插入图片描述
然后克隆复制地址
在这里插入图片描述
再复制好链接之后,我们在Linux下输入指令:

指令:git clone 链接

在这里插入图片描述
即可将远端仓库克隆到本地

完成之后我们可以在里面新建文件和目录
在这里插入图片描述


2.1 git的三板斧

git add

我们在当前目录下直接输入:
指令:git add 文件名git add .

  • 如果指定文件那么就会将指定文件添加到本地仓库
  • 如果是后者那么会将此目录下所有文件添加到本地仓库

如果在多次添加后记不清本地仓库有哪些文件我们也可以查看:
指令:git status

在这里插入图片描述
这样可以查看本地仓库有哪些文件


git commit

git commit 就是添加日志

在commit时一定要输入日志
指令: git commit -m "日志"

日志的填写不能随意,日志内容会随着文件一起提交到远端仓库。如果随意填写,在被别人查看时,难免会出现不好的一面。
在这里插入图片描述
这样代表日志更新成功!

注意:在第一次使用commit时系统可能会让你输入邮箱和用户名密码。按照系统提示的操作就行


git push

git push就是将我们刚刚进行的操作从本地仓库推出送到远端仓库:
指令:git push

注意:刚刚进行的git add并没有将文件直接推送到远端仓库

在这里插入图片描述
输入你自己的用户名和密码即可PUSH成功!

3. 总结

在这里插入图片描述

Linux常用的开发工具我们就说到这里,Linux开发工具不仅仅只有这么一点,make/makefile我们也仅仅只做到了入门,做一下简单的介绍,目前阶段完全够用,Linux内容还有很多,希望我们能继续加油。
谢谢大家支持本篇到这里就结束了
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汇智知了堂携手西华大学共探鸿蒙生态发展之路

近日&#xff0c;汇智知了堂有幸走进美丽的西华大学&#xff0c;为师生们带来了一场别开生面的鸿蒙专场讲座。本次讲座旨在深入解析鸿蒙生态的发展前景&#xff0c;增进同学们对鸿蒙系统的认识&#xff0c;同时展示汇智知了堂在产教融合领域的专业实力。 在讲座现场&#xff…

app渗透测试

1.夜神模拟器搭建流程 直接自定义安装 就可以了 如果是androd7本 修改为低于7版本的 调整夜神版本 2.burp设置代理 可以自己指定电脑ip windows cmd ifconfig 设置-添加-指定地址端口 然后导出证书或者在夜神模拟器使用指定的ip加端口访问下载 3.安装证书 如果是导出的…

(学习日记)2024.05.03:UCOSIII第五十七节:User文件夹函数概览(uCOS-III->Source文件夹)第三部分

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

Pytorch 计算深度模型的大小

计算模型大小的方法 卷积 时间复杂度 与 空间复杂度 的计算方式&#xff1a; C 通道的个数&#xff0c;K卷积核大小&#xff0c;M特征图大小&#xff0c;C_l-1是输入通道的个数&#xff0c;C_l是输出通道的个数 1 模型大小 MB 计算模型的大小的原理就是计算保存模型所需要…

嵌入式全栈开发学习笔记---Linux基本命令2

目录 cp 源路径 目的路径 cp -r 源路径 目的路径 mv 源路径 目的路径 mv oldname newname 接下来我们继续介绍两个常用的命令 一个是拷贝文件&#xff0c;一个是剪切文件 &#xff0c;或者也可以用来改名字。 cp 源路径 目的路径 “cp”用来拷贝文件或者目录&#xff0c;…

jpa分页插件对象Pageable出现了错误异常如何解决?

jpa分页插件对象Pageable出现了错误异常如何解决&#xff1f;&#xff01; 一般来说&#xff0c;遇到这种的错误异常情况&#xff0c;通常情况 下&#xff0c;都是因为程序员把传递的分页页码数字写错了。 正常情况下&#xff0c;分页页码起始数字应该是0&#xff1b;而不是1…

【研发管理】产品经理知识体系-产品创新中的市场调研

导读&#xff1a;在产品创新过程中&#xff0c;市场调研的重要性不言而喻。它不仅是产品创新的起点&#xff0c;也是确保产品成功推向市场的关键步骤。对于产品经理系统学习和掌握产品创新中的市场调研相关知识体系十分重要。 目录 概述&#xff1a;市场调研重要性 1、相关概…

Python脚本:论文必备!给PDF指定页面后添加空白页

一、代码 直接上代码 import PyPDF2,os from datetime import datetimedef add_blank_pages(pdf_path, page_numbers):pdf_writer PyPDF2.PdfWriter()timestamp datetime.now().strftime("%Y%m%d%H%M%S")# 读取PDF文件with open(pdf_path, rb) as pdf_file:pdf_r…

【Java EE】Spring核心思想(一)——IOC

文章目录 &#x1f38d;Spring 是什么&#xff1f;&#x1f384;什么是IoC呢&#xff1f;&#x1f338;传统程序开发&#x1f338;传统程序开发的缺陷&#x1f338;如何解决传统程序的缺陷&#xff1f;&#x1f338;控制反转式程序开发&#x1f338;对比总结 &#x1f332;理解…

Kafka学习笔记01【2024最新版】

一、Kafka-课程介绍 官网地址&#xff1a;Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/ kafka 3.6.1版本&#xff0c;作为经典分布式订阅、发布的消息传输中间件&#xff0c;kafka在实时数据处理、消息队列、流处理等领域具有广泛…

检测水箱水位传感器有哪些?

生活中很多家电中都内含一个水箱&#xff0c;例如电蒸锅、饮水机、蒸汽熨斗、咖啡机等等&#xff0c;这些内部都有水箱&#xff0c;或大或小。当然水箱也有很多种类型&#xff0c;例如生活水箱、生产水箱、消防水箱等等。 把水储存在水箱中也会遇到这些问题&#xff0c;水箱没…

JavaScript云LIS系统源码 前端框架JQuery+EasyUI+后端框架MVC+SQLSuga大型医院云LIS检验系统源码 可直接上项目

JavaScript云LIS系统源码 前端框架JQueryEasyUI后端框架MVCSQLSuga大型医院云LIS检验系统源码 可直接上项目 云LIS系统概述&#xff1a; 云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序&#xff0c;可协助区域内所有临床实验室相互协调并完成日常检验工作&#xff…

pytest-asyncio:协程异步测试案例

简介&#xff1a;pytest-asyncio是一个pytest插件。它便于测试使用异步库的代码。具体来说&#xff0c;pytest-asyncio提供了对作为测试函数的协同程序的支持。这允许用户在测试中等待代码。 历史攻略&#xff1a; asyncio并发访问websocket Python&#xff1a;协程 - 快速创…

SVGDreamer: 文本引导矢量图形合成

现有的 Text-to-SVG 方法还存在两个限制&#xff1a;1.生成的矢量图缺少编辑性&#xff1b;2. 难以生成高质量和多样性的结果。为了解决这些限制&#xff0c;作者提出了一种新的文本引导矢量图形合成方法&#xff1a;SVGDreamer。 论文题目&#xff1a; SVGDreamer: Text Guid…

《Git---Windows Powershell提交信息中文乱码解决方案》

解释&#xff1a; Windows PowerShell中的Git乱码通常是因为字符编码不正确或Git配置不支持Windows系统的默认编码导致的。Git在处理文件时可能使用UTF-8编码&#xff0c;而Windows系统的命令行工具&#xff08;如PowerShell&#xff09;默认使用的是Windows-1252或GBK编码。 …

【库函数】Linux下动态库.so和静态库.a的生成和使用

目录 &#x1f31e;1. Linux下静态库和动态库的基本概念 &#x1f31e;2. 动态库 &#x1f30a;2.1 动态库如何生成 &#x1f30d;2.1.1 文件详情 &#x1f30d;2.1.2 编译生成动态库 &#x1f30a;2.2 动态库如何使用 &#x1f30d;2.2.1 案例 &#x1f30d;2.2.2 动态…

TCP详解

2.1TCP 由IETF的RFC793定义的传输控制协议&#xff08;Transmission Control Protocol&#xff0c;TCP&#xff09;是一种基于字节流的传输层通信协议。在传输数据前需要在发送与接收者之间建立连接&#xff0c;通过相应机制保证其建立连接的可靠性。 TCP协议具备以下特性&am…

云备份项目->配置环境

升级gcc到7.3版本 sudo yum install centos-release-scl-rh centos-release-scl sudo yum install devtoolset-7-gcc devtoolset-7-gcc-c source /opt/rh/devtoolset-7/enable echo "source /opt/rh/devtoolset-7/enable" >> ~/.bashrc 安装Jsoncpp库 sud…

十、多模态大语言模型(MLLM)

1 多模态大语言模型&#xff08;Multimodal Large Language Models&#xff09; 模态的定义 模态&#xff08;modal&#xff09;是事情经历和发生的方式&#xff0c;我们生活在一个由多种模态(Multimodal)信息构成的世界&#xff0c;包括视觉信息、听觉信息、文本信息、嗅觉信…

STM32与Proteus的串口仿真详细教程与源程序

资料下载地址&#xff1a;STM32与Proteus的串口仿真详细教程与源程序 资料内容 包含LCD1602显示&#xff0c;串口发送接收&#xff0c;完美实现。 文档内容齐全&#xff0c;包含使用说明&#xff0c;相关驱动等。 解决了STM32的Proteus串口收发问题。 注意&#xff1a;每输…