【linux基础(七)】Linux中的开发工具(下)--make/makefile和git

💓博主CSDN主页:杭电码农-NEO💓

⏩专栏分类:Linux从入门到开通⏪

🚚代码仓库:NEO的学习日记🚚

🌹关注我🫵带你学更多操作系统知识
  🔝🔝


在这里插入图片描述

Linux中的开发工具

  • 1. 前言
  • 2. make和makefile介绍
  • 3. make和makefile再理解
  • 4. 伪目标的定义以及性质
  • 5. 文件的三个属性
  • 6. makefile推导能力和特殊指令
  • 7. git的简单介绍以及使用
    • 7.1 git三板斧之add
    • 7.2 git三板斧之commit
    • 7.3 git三板斧之push
  • 8. 总结以及拓展

1. 前言

如果你不知道什么是vim和gcc
请先阅读这两篇文章后再学习本节:

文章一: vim和yum
文章二: gcc/g++

本章重点:

本篇文章会着重讲解Linux中的
自动化构建代码工具: make/makefile
的介绍与使用,并且将再次熟悉并拓展
文件的属性相关概念和指令,最后
讲解代码管理仓库git的使用方法

在Linux下编译代码时,每次都会输入

gcc code.c -o code.exe

在删除可执行程序时,每次都会输入

rm -rf code.exe

这样非常的不方便,很麻烦,于是乎学习
自动化构建代码是很重要的,它可以提高
我们之后在Linux下编程的效率!


2. make和makefile介绍

首先,make是一条指令,而makefile是一个文件
makefile是需要自己创建的一个文件
并且makefile是一个具有特定格式的文本文件

在当前目录创建makefile文件,再用vim编辑

在这里插入图片描述

不要问这代码是什么意思,先写这段代码
请注意,第二行是以TAB键开头
不管你的TAB键是向后移动两格
还是四格,固定格式是以TAB开头

写好后在底行模式用wq保存并退出

在当前目录下我有一个.c文件叫csdn.c
现在我想自动化构建代码只需要

使用指令: make

在这里插入图片描述
此时我们需要删除这个可执行程序

使用指令: make clean

在这里插入图片描述


3. make和makefile再理解

在上面使用make指令时,其实我们执行的是

make = make mybin

输入make mybin也可以自动化构建代码
这是因为:

在首次使用make时,会从上到下扫描
makefile文件,若发现了第一个目标
文件,就会执行它,所以makefile文件中
的第一个指令可以直接使用make执行
而后面的指令的make后面需要跟特定的指令

现在将这两个代码的位置交换:

.PHONY:clean 
clean:rm -rf mybin                                                                                                                                                     
mybin:csdn.cgcc csdn.c -o mybin 

然后再使用make指令

在这里插入图片描述

此时它们的使用就交换了!


4. 伪目标的定义以及性质

在makefile文件中,我们写了这样一段代码:

.PHONY:clean
clean:rm -rf mybin

.PHONY是将clean指令修饰成了伪目标

这样做有什么用?mybin没有修饰
那么clean和mybin有什么区别?
来看下面的指令:

在这里插入图片描述

可以发现,clean指令被修饰成伪目标后
每次使用它都会执行相应的指令
然而mybin在执行了一次后,就无法在
短时间内程序执行了

以我们目前的经验来看有两个结论:

  1. 被修饰成伪目标后,此文件总是被执行
  2. make总是不让重新编译代码

那么为什么不是伪目标的文件
不能实时刷新呢?请看接下来的讲解


5. 文件的三个属性

在了解文件的三个属性之前
我们要先了解系统是怎样做到第二次
make的时候将我们的请求驳回的?

现在我们知道一个事实:
一点是先有源文件才有可执行程序

所以在文件第一次编写后编译代码时
此时的源文件修改时间一定是小于
生成的可执行程序文件的修改时间
所以在第二次make时,系统发现源文件
的修改时间还是小于可执行程序的
所以系统驳回了请求,然而当我们修改
了源文件后,还没有编译时,此时源文件
修改时间大于可执行程序的修改时间
所以程序会接受我们的请求!

查看文件的属性:

使用指令: stat 文件名

在这里插入图片描述

这些信息你可能看的不太懂,但是没关系
我们今天的主角是红框中的三个文件属性
现在用下图来隆重介绍一下它们:

在这里插入图片描述

我们经常说,文件等于内容+属性
修改文件的内容可能会影响文件属性
因为增加或减少代码会影响文件的大小
然而修改文件的属性不会影响文件内容
比如修改文件的拥有者,修改文件权限等

上面的过程大家可以自行下来验证一下

这里想要带给大家的结论是:
看文件的频次是最频繁的,所以access
时间并不是实时更新的!

可以通过下面的视频来验证一下:

access时间的更新

所以现在能够解释为什么系统
不让我们频繁的进行编译代码操作了!
而伪目标的作用就是强制执行指令


6. makefile推导能力和特殊指令

在makefile文件中时常能写出有趣的代码
这里给大家举个例子:

mybin:csdn.ogcc csdn.o -o mybin 
csdn.o:csdn.sgcc -c csdn.s -o csdn.o
csdn.s:csdn.igcc -S code.i -o csdn.s
csdn.i:csdn.cgcc -E csdn.c -o csdn.i 

这段代码是什么意思呢?

首先,mybin依赖的是.o文件
但是系统中此时没有.o文件
就会执行下一条指令,但是.o文件
依赖的是.s文件,系统中此时没有.s文件
又会跳到下一条指令,以此往复直到
找到系统中存在的.c文件,再倒推回去

当然这只是做一个了解,这就是推导能力

除此之外,在makefile中还可以定义变量

target=mybin                                                                                                                                                        
cc=gcc 
src=csdn.c   
$(target):$(src) $(cc) $(src) -o $(target)
.PHONY:clean 
clean: rm -rf $(target)

这样写你还认识之前的代码吗?
在要替换的内容前加上$和()即可
像C语言定义变量一样编辑代码

并且,可以用$^代表依赖关系的左边
可以用$@代表依赖关系的右边

比如:

mybin:csdn.cgcc $@ -o $^
.PHONY:clean  
clean: rm -rf mybin

这里的$^就代表csdn.c

如果你不想一条指令被打印在显示器
可以在指令前加上@符号

在这里插入图片描述


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

git是一种代码管理器,写git程序的和
写Linux系统的是同一个人,所以Linux
可以直接和gitee或GitHub相关联!

这里使用gitee举例子:先在远端创建仓库

Linux下的gitee创建仓库

在创建好仓库后,复杂https的链接

使用指令: git clone 链接

即可将远端仓库克隆到本地
接下来的操作和Windows上的三板斧相似:

首先在本地仓库创建一份文件:

在这里插入图片描述


7.1 git三板斧之add

我们在当前目录下直接输入指令:

git add 文件名 或 git add .

前者是添加特定的文件到本地仓库
后者是将当前目录下所有文件提交

输入完这条指令后,文件就已经
被添加到本地仓库了

那么怎样在本地仓库查看有哪些文件呢?

使用指令: git status

在这里插入图片描述

可以发现,本地仓库中还有test.c
没有被提交到远端仓库!


7.2 git三板斧之commit

请注意,在commit时一定要输入日志

使用指令: git commit -m "日志"

日志一定不要乱写!
日志一定不要乱写!
日志一定不要乱写!

重要的事情说三遍,有些面试官会查看
你的gitee或GitHub,就会去看日志!

比如这里我可以这样写日志:

在这里插入图片描述

输入此指令后,如果你是第一次输入
系统可能会让你输入邮箱和用户名密码
这时系统会将指令的格式给你显示出来
你只需要将格式中引号内的内容改成
你的自己的邮箱或用户有即可!

显示这样的内容代表成功了!

在这里插入图片描述


7.3 git三板斧之push

在commit输入完日志后,输入指令:

git push

将本地仓库的文件推送至远端仓库!

输入这条指令后,会显示这样的画面:

在这里插入图片描述
输入你自己的账号和密码即可推送成功!

请注意,账号最好输入下图红框的内容

(注意不要加上@符号)

在这里插入图片描述


8. 总结以及拓展

Linux下的开发工具不止于此
还有常用的调试工具gdb等等
并且make/makefile现在只是入门
要真正把make/makefile搞懂至少得用10篇博客!
所以这里只做了makefile得简单介绍,够用就行!

大家要维护好自己的gitee或GitHub
一年都百分之80都是小绿点会很加分的!

拓展阅读:关于git的历史故事:

git的历史故事


🔎 下期预告:Linux进程概念 🔍

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重装系统(配置环境)

这里写目录标题 0.重装系统1.python1.1 anaconda1.2 pycharm1.3 深度学习环境配置 2.java2.1.安装JDK2.2.配置JDK环境变量2.3IDEA2.4 Maven 3.大数据3.1 虚拟机3.2 Hadoop平台3.3 存储3.4 采集3.5 计算3.6 查询3.7 可视化 0.重装系统 // An highlighted block var foo bar;1.…

SpringBoot 的版本、打包、Maven

一、SpringBoot 结构、集成 1.1、集成组件 Spring Core:Spring的核心组件,提供IOC、AOP等基础功能,是Spring全家桶的基础。 Spring Boot:一个基于Spring Framework的快速开发框架,可以快速创建独立的、生产级别的…

pnpm入门教程

一、概述 1、更小 使用 npm 时,依赖每次被不同的项目使用,都会重复安装一次。 而在使用 pnpm 时,依赖会被存储在内容可寻址的存储中。 2、更快 依赖解析。 仓库中没有的依赖都被识别并获取到仓库。目录结构计算。 node_modules 目录结构是…

Vue3快速上手

1.Vue3简介 2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王)耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址:Release v3.0.0 One Piece vuejs/core GitHub 2.Vue3带…

二叉搜索树(BST,Binary Search Tree)

文章目录 1. 二叉搜索树1.1 二叉搜索树概念1.2 二叉搜索树的查找1.3 二叉搜索树的插入1.4 二叉搜索树的删除 2 二叉搜索树的实现3 二叉搜索树的应用3.1二叉搜索树的性能分析 1. 二叉搜索树 1.1 二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树&#xf…

大模型对外提供应用的三种服务方式及示例

最近在研究Llama大模型的本地化部署和应用测试过程中,为了给大家提供更多的应用方式,研究了如何利用python快速搭建各种应用访问服务,一般来说,我们开发完成的软件模块为了体现价值,都需要对外提供服务,最原…

【css】如何实现自定义滚动悬浮置顶、固定表头

说到固定表头或者滚动置顶,我们需要认识css的两个api的2个属性: position: sticky; position: sticky; 是 CSS 中的一种定位方式。当应用于元素时,该元素在滚动时会固定在父容器的指定位置,直到滚动到达特定的位置或条件满足后&…

APP产品经理岗位的具体内容(合集)

APP产品经理岗位的具体内容1 1、负责项目产品团队的管理工作,对项目产品团队考核目标负责; 2、全面负责“工务园”所有产品,全方位负责其生命周期管理; 3、按照产品管理相关的计划和规范,对产品版本的更新及发布负责,完善产品的…

书剑宠物疫苗接种管理软件操作教程

【软件简介】 书剑宠物疫苗接种管理软件是一款宠物疫苗接种管理的工具,适合宠物诊所使用。具有动物主人建档、宠物疫苗接种登记管理、每日提醒、打印疫苗接种通知卡、自定义短信提醒模板等完善的功能。 另外本软件的特色是同时具有手机网页版功能,手机…

警惕!多本SCI/SSCI被剔除,9月SCI/SSCI期刊目录已更新~(附下载)

【SciencePub学术】 2023年9月20日,科睿唯安更新了Web of Science核心期刊目录。 继上次SCI期刊目录和SSCI期刊目录更新之后,本次9月更新共有9本期刊发生变动: • SCIE:有3本期刊不再被SCIE期刊目录收录(Editorial De-listing/Pr…

VScode的注释和标题,标签,img的src属性(如何网页上插入图片)(Mac如何开启js控制台)(如何免费复制网页中的文字)

一、注释 <!--这是注释-->&#xff0c;在这个<!--内容-->里面的是注释&#xff0c;内容就是你要填写的注释。 在windows上查看&#xff0c;你是使用F12&#xff0c;但是mac上(我也不清楚为什么f12不好使&#xff0c;这时候就要按照下面的步骤调出这个界面 看这个高…

【校招VIP】前端JS之深拷贝和浅拷贝

考点介绍 js中的浅拷贝和深拷贝&#xff0c;只是针对复杂数据类型(Objcet&#xff0c;Array)的复制问题。简单来讲浅拷贝和深拷贝都可以实现在原有对象的基础上再生成一份的作用。但是根据新生成的对象能否影响到原对象可以分为浅拷贝和深拷贝。 前端JS之深拷贝和浅拷贝-相关题…

聊聊Spring的Aware接口

文章目录 0.前言1.什么是Aware接口2.Aware接口的设计目的3.详解3.1. ApplicationContextAware我们举个例子来说明 3.2. BeanFactoryAware3.3. BeanNameAware3.4. ServletContextAware3.5. MessageSourceAware3.6. ResourceLoaderAware 4.参考文档 0.前言 背景&#xff1a; 最近…

Spring Boot魔法:简化Java应用的开发与部署

文章目录 什么是Spring Boot&#xff1f;1. 自动配置&#xff08;Auto-Configuration&#xff09;2. 独立运行&#xff08;Standalone&#xff09;3. 生产就绪&#xff08;Production Ready&#xff09;4. 大量的起步依赖&#xff08;Starter Dependencies&#xff09; Spring …

【SpringMVC】JSR 303与interceptor拦截器快速入门

目录 一、JSR303 1、什么是JSR 303&#xff1f; 2、为什么要使用JSR 303&#xff1f; 3、JSR 303常用注解 3.1、常用的JSR 303注解 3.2、Validated与Valid区别 3.2.1、Validated 3.2.2、Valid 3.2.3、区别 4、使用案例 4.1、导入依赖 4.2、配置校验规则 4.3、编写…

大模型Tuning分类

类型总结 微调&#xff08;Fine-tunning&#xff09; 语言模型的参数需要一起参与梯度更新 轻量微调&#xff08;lightweight fine-tunning&#xff09; 冻结了大部分预训练参数&#xff0c;仅添加任务层&#xff0c;语言模型层参数不变 适配器微调 &#xff08;Adapter-t…

数据研发“新人”如何快速落地?

作者&#xff1a;肖迪(墨诩) 一、前言 这个季度主推安全月构筑&夯实稳定性底盘&#xff0c;就组织了组里的同学对核心业务链路进行了稳定性的摸排。在摸排过程中&#xff0c;不断有个声音在问你摸排出来的问题就是全部问题么&#xff1f;你加的监控加全了么&#xff1f;你…

进程同步与互斥

目录 进程同步与互斥&#xff08;1&#xff09; 第一节、进程间相互作用 一、相关进程和无关进程 二、与时间有关的错误 第二节、进程同步与互斥 一、进程的同步 二、进程的互斥 三、临界区 进程同步与互斥&#xff08;2&#xff09; 三、信号量与P、V操作的物理含义…

Tomcat 下部署 jFinal

1、检查web.xml 配置&#xff0c;在 tomcat 下部署需要检查 web.xml 是否存在&#xff0c;并且要确保配置正确&#xff0c;配置格式如下。 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-i…

使用命令行(CMD)编译单Java文件

1.安装JDK JDK官网&#xff1a;https://www.oracle.com/java/technologies/downloads/ 选 Windows -> x64 MSI Instaler或者x64 Installer 安装成功后。 2.配置环境变量 按下Win键&#xff0c;搜索环境变量 添加JAVA_HOME系统环境变量&#xff0c;要指定类似这样的路径(…