Linux——简单认识vim、gcc以及make/Makefile

前言大佬写博客给别人看,菜鸟写博客给自己看,我是菜鸟。

1、vim操作:

默认打开vim时,vim处于命令模式。(在其他模式中,Esc就能够返回命令模式)

常用的命令有:

n + gg:跳转到n行,没有n就跳转到首行

n + shift + g:跳转到n行,没有n就跳转到末行

shift+4:光标定位到行尾

shift+6:光标定位到行首

yy:复制当前行

n+p:粘贴到下n行,没有n就粘贴以行

n+dd:剪切or删除下n行,没有n就剪切一行

shift+~:大小写快速切换

n+r:小范围文本替换,n个文本全部替换为统一字符

shift+r:进入替换模式,替换模式是一个新的模式,可以Esc退出到命令模式

u:撤销命令,相当于 ctrl+z

ctrl+u:对撤销命令进行撤销

shift+zz:保存并退出vim

crtr + v ->hjkl -> shift + i -> // -> Esc :批量化注释

ctrl + v ->hjkl -> d :批量化去注释

早期的键盘没有上下左右,因此在命令模式下:

h <-> 向左

l  <-> 向右

j  <-> 向下

k <-> 向上

shift + ;  <->  进入底行模式

w <-> 保存

q <-> 退出

set nu <-> 显示每一行行号

2 、gcc/g++

gcc 👉:只用来编译C

g++ 👉:能够编译C和C++

代码从 .c 到执行的过程:

        Ⅰ:预处理(进行宏替换、去注释、条件编译、头文件展开)

                对应指令:gcc -E test.c -o test.i

                文件后缀 .c → .i

        Ⅱ:编译(生成汇编)

                对应指令:gcc -S test.i -o test.s

                文件后缀 .i → .s

        Ⅲ:汇编(生成机器可以识别的代码)

                对应指令:gcc -c test.s -o test.o

                文件后缀 .s → .o

        Ⅳ:链接(生成可执行文件或库文件)

                .o 文件与库文件进行链接 -> 可执行程序

补足一些这方面的常识:

        问:为什么要进行编译?为什么要汇编?为什么不跳过这些步骤,让代码直接变成可执行程序?

        答:因为从历史的角度出发,先有二进制编程,再有编译器,再有汇编语言,再到C/C++这样的其他语言,我们站在巨人的肩膀上,企业家为了节省语言的开发成本,因此需要遵循前人的步伐。

        问:什么是编译器自举?

        答:前面提到,从历史角度出发,先有二进制编程,再有汇编,为了能够让二进制代码变成汇编代码,需要二进制编译器进行转换,通过二进制编译器编译汇编语言所写的软件。随着技术的发展,后来就用汇编语言所写的编译器编译汇编语言所写的软件,这一过程就称之为编译器自举

3、动静态库和动静态链接

1.动静态库:

Linux环境下:

👉:动态库为 → libXXX.so     XXX为库的名称

👉:静态库为 → libXXX.a       

Windows环境下:

👉:动态库为 → xxx.dll          XXX为库的名称

👉:静态库为 → xxx.lib 

2.动静态链接:

Linux环境下:

👉:动态链接指令:gcc test.o -o mytest    (将二进制代码 test.o 转化为可执行程序 mytest)

👉:静态链接指令:gcc test.o -o mytest -static

动态链接和静态链接的区别:

👉:动态链接会将库的地址拷贝到内存中,编译器(连接器)会通过寻址的方式,将可执行程  序与动态库链接起来,动态库不在内存当中。动态库不能丢失,一旦丢失所有依赖动态库的程序都会出错。

👉:静态链接会将库方法直接拷贝到可执行程序当中

4、自动化构建-make/Makefile

make/Makefile 是什么?

         make 👉:指令

         Makefile 👉:文件

make/Makefile 的核心思想?

        👉:通过依赖关系和依赖方法形成目标文件

make/Makefile 具体语法?

        假设现有文件 code.c以及Makefile

        

        Makefile内部语法如下图所示:

        

        注:

        ①:code.c 与 mycode 建立依赖关系,而 gcc code.c -o mycode 为依赖方法,通过该串指令,生成 code.c 代码的可执行程序

        

        

        ②:.PHONY→伪目标,clean能够被多次执行,但同样的code.c只能被执行一次

        

        

        ③:只有当我们对code.c文件进行修改时,make会对比源文件和可执行文件的修改时间,若前后时间被修改过,那么能够再次执行make (时间一共有三个,对比的Modify时间)

        

make/Makefile执行过程:

        倘若目录里没有code.o,Makefile会将该方法入栈,并去寻找code.o依赖谁,直至找到当前目录中存在的依赖关系为止,并执行依赖方法。然后再执行栈中的依赖方法,并出栈,直至完成所有依赖方法

        

make/Makefile 更加通用的语法:

👉:前五行可以视为C中的宏定义,$(宏定义) 即可使用

👉:$(shell ls *.c) 取当前目录中所有 .c 后缀的文件   还有一种表示方法为:$(wildcard *.c)

👉:&(SRC:.c=.o)将当前目录中所有 .c 后缀的文件转为 .o 后缀的文件

👉:@去回响,Makefile 每当执行一个依赖方法时,都会把依赖方法打印出来,加了@就不会打印

👉:$^  <-> 依赖对象(OBJ) 

        $@ <-> 被依赖对象(BIN)

        

👉:%.c <-> 匹配任意以 .c 结尾的文件 

        $<    <-> 将所有.c 结尾的文件一个一个的转换成 .o 结尾的文件

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

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

相关文章

Java反序列化之CommonsCollections2链的学习

一、前言 Apache Commons Collections 是一个著名的辅助开发库&#xff0c;包含了一些Java中没有的数据结构和辅助方法&#xff0c;不过随着Java 9 以后的版本中原生库功能的丰富&#xff0c;以及反序列化漏洞的影响&#xff0c;它也在逐渐被升级或替代。 在2015年底的common…

前端web

题目&#xff1a;制作带有下拉悬停菜单的导航栏 效果图 一、先制作标签 <body> <div id"menu"> <div id"container"> <div class"item">游戏1 <div class…

【大数据学习 | kafka高级部分】kafka中的选举机制

controller的选举 首先第一个选举就是借助于zookeeper的controller的选举 第一个就是controller的选举&#xff0c;这个选举是借助于zookeeper的独享锁实现的&#xff0c;先启动的broker会在zookeeper的/contoller节点上面增加一个broker信息&#xff0c;谁创建成功了谁就是主…

Android 开发指南:初学者入门

Android 是全球最受欢迎的移动操作系统之一&#xff0c;为开发者提供了丰富的工具和资源来创建各种类型的应用程序。本文将为你提供一个全面的入门指南&#xff0c;帮助你从零开始学习 Android 开发。 目录 1. 了解 Android 平台[1]2. 设置开发环境[2]3. 学习基础知识[3]4. 创…

漏洞挖掘 | 某医院小程序支付漏洞+越权

漏洞挖掘 | 某医院小程序支付漏洞越权 登陆后点击个人信息&#xff0c;抓包&#xff0c;放到repeter模块 修改strUserID参数可以越权查看别人信息 放intruder模块可以跑数据&#xff0c;这里有几万信息泄露 回到首页&#xff0c;点击医生咨询功能点 随便选一个需要付费的医…

MFC图形函数学习07——画扇形函数

绘制扇形函数是MFC中绘图的基本函数&#xff0c;它绘制的仍是由椭圆弧与椭圆中心连线构成的椭圆扇形&#xff0c;特例是由圆弧与圆心连线构成的圆扇形。 一、绘制扇形函数 原型&#xff1a;BOOL Pie(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); …

基于Python的膳食健康系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

头歌网络安全(11.12)

头歌禁止复制解决 必须先下篡改猴&#xff01;&#xff01;&#xff01;&#xff01; 头歌复制助手 Educoder Copy Helperhttps://scriptcat.org/zh-CN/script-show-page/1860 Java生成验证码 第1关&#xff1a;使用Servlet生成验证码 任务描述 本关任务&#xff1a;使用se…

ROM修改进阶教程------安卓14 安卓15去除app签名验证的几种操作步骤 详细图文解析

在安卓14 安卓15的固件中。如果修改了系统级别的app。那么就会触发安卓14 15的应用签名验证。要么会导致修改的固件会进不去系统,或者进入系统有bug。博文将从几方面来解析去除安卓14 15应用签名验证的几种方法。 💝💝💝通过博文了解: 1💝💝💝-----安卓14去除…

第七部分:2. STM32之ADC实验--AD多通道(AD采集三路传感器模块实验:光敏传感器、热敏传感器、反射式传感器附赠温湿度传感器教程)

这个多通道采用非扫描模式--单次转换模式 1.代码配置链路图 2. ADC的输入通道 3.ADC的非扫描模式的转换模式&#xff08;单次和连续&#xff09; 4.ADC的扫描模式的转换模式&#xff08;单次和连续&#xff09; 5.采集校准 代码实验&#xff1a; 代码部分&#xff1a; #inclu…

crond 任务调度 (Linux相关指令:crontab)

相关视频链接 crontab 进行 定时任务 的设置 概述 任务调度&#xff1a;是指系统在某个时间执行的特定的命令或程序 任务调度的分类&#xff1a; 1.系统工作&#xff1a;有些重要的工作必须周而复始地执行。如病毒扫描等。 2.个别用户可能希望执行某些程序&#xff0c;比如…

基于python 的opencv 使用GrabCut算法分割图像代码

#利用grabcut算法分割图像import numpy as np import cv2 from matplotlib import pyplot as plt import warningswarnings.filterwarnings("ignore", module "matplotlib")imgpath E:/code/image_opencv_test/lena.jpg img cv2.imread(imgpath)Coords1x…

AndroidStudio-文本显示

一、设置文本的内容 1.方式&#xff1a; &#xff08;1&#xff09;在XML文件中通过属性&#xff1a;android:text设置文本 例如&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.andr…

css:没错又是我

背景 给元素添加背景样式 还可以设置背景颜色、背景图片&#xff08;教练我要学这个&#xff09;、背景平铺、背景图片位置、背景图像固定 背景颜色 这个我们用过&#xff0c;就是&#xff1a; a {background-color: hotpink; } 一般默认值是transparent&#xff0c;也就…

使用Git工具在GitHub的仓库中上传文件夹(超详细)

如何使用Git工具在GitHub的仓库中上传文件夹&#xff1f; 如果觉得博主写的还可以&#xff0c;点赞收藏关注噢~ 第一步&#xff1a;拥有一个本地的仓库 可以fork别人的仓库或者自己新创建 fork别人的仓库 或者自己创建一个仓库 按照要求填写完成后&#xff0c;点击按钮创建…

uniapp的基本使用(easycom规范和条件编译)和uview组件的安装和使用

文章目录 1、uniapp1.uview组件安装2.uview-plus组件安装 2、条件编译3、easycom规范1.组件路径符合规范2.自定义easycom配置的示例 总结 1、uniapp UniApp的UI组件库&#xff0c;如TMUI、uViewUI、FirstUI、TuniaoUI、ThorUI等&#xff0c;这些组件库适用于Vue3和TypeScript&…

攻防世界37-unseping-CTFWeb

攻防世界37-unseping-CTFWeb <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($this->method, array("…

【大数据学习 | HBASE高级】region split机制和策略

1. region split机制 ​ HRegionServer拆分region的步骤是&#xff0c;先将该region下线&#xff0c;然后拆分&#xff0c;将其子region加入到hbase:meta表中&#xff0c;再将他们加入到原本的HRegionServer中&#xff0c;最后汇报Master。 split前&#xff1a;hbase:meta表有…

FMC 扩展子卡6 路 422,8 组 LVDS,8 路 GPIO

FMC 扩展子卡6 路 422,8 组 LVDS,8 路 GPIO 卡是一款支持多路 LVCMOS 和 LVDS 信号互转的 FMC 扩展子板。它能支持 6 路 422 信号的输入 / 输出 ,8 组 LVDS 信号的输入 / 输出和 8 路 GPIO 信号的输入 / 输出。本产品基于一些逻辑转换芯片而设计&#xff0c;能实现差分信号转单…

old-cms(原生PHP开发的企业网站管理系统)

old-cms是一个使用原生PHP开发的实用的PHP企业网站管理系统&#xff0c;包括企业网站常用的功能板块&#xff0c;如&#xff1a;产品管理、新闻管理、栏目管理、模板标签管理、分类管理、诚聘英才、在线留言反馈、关于我们&#xff08;公司简介&#xff09;等等&#xff0c;也有…