Linux编程常用的工具和操作(简单介绍)

一.vim编辑器

编译器有vim、gedit、vscode等;

1.vim的安装

联网条件下终端输入指令:sudo apt-get install vim

2.vim的使用

终端输入指令:vim 文件名 (如果文件存在,只打开,文件不存在,创建并打开。)

3.Vim中的四种模式:

命令模式,插入模式,底行模式,可视模式

1)命令模式:

可以用来复制,粘贴,删除,剪切等

 直接 vim 打开文件,默认就是命令模式;

 不管当前是什么模式,按esc键就可以快速回到命令模式

复制命令:

    yy -- 复制光标所在位置的一整行;

    nyy -- 复制光标所在位置往下n整行;

    yw -- 复制光标所在位置的一个单词;

    nyw -- 复制光标所在位置往后的 n 个单词;

粘贴命令:

    P – 粘贴

删除/剪切命令:

    x -- 删除光标所在位置的单字符;

    X -- 删除光标所在位置的前一个位置的单字符;

    dd -- 删除/剪切光标所在位置的一整行;

    ndd -- 删除/剪切光标所在位置的往下的 n 整行;

    dw -- 删除/剪切光标所在位置的一个单词;

    ndw -- 删除/剪切光标所在位置的往后的 n 单词;

    d$ -- 删除/剪切光标所在位置到行尾的所有内容;

    d^ -- 删除/剪切光标所在位置到行首的所有内容;

撤销命令:

    u

反撤销命令:

    Ctrl+r

其他:

    gg -- 光标快速回到文件开头

    G -- 光标快速回到文件末尾

    gg=G -- 文件中的内容会格式化对齐

2)插入模式:

用于编写代码

首先要退回命令模式,然后再输入(以下任意一个字符):i、I、a、A、o、O(大写o);

    i:插入到光标所在位置(使用较多)

    I:插入到光标所在位置的行首

    a:插入到光标所在位置的下一个位置

    A:插入到光标所在位置的行尾

    o:插入到光标所在位置的下一行

    O:插入到光标所在位置的上一行

3)底行模式:

可用于字符串的替换,查找,保存,退出等

方式1:先esc键退回到命令模式,再输入:(英文冒号,需要使用shift键)键,可以切换到底行模式

    相关操作:

        保存:w(加回车键)

        退出:q(回车键)

        保存并退出:wq(回车键)

        强制退出:q!(回车键)

    文本替换:

        整体替换 : %s /原来的字符串/新的字符串/g

        部分替换 : m,ns /原来的字符串/新的字符串/g

        整行换位置:xmy 将第x行,移动到第y行的后边

方式2:先退回命令模式,再输入/,可以切换到底行模式

    字符串查找:

        /字符串(回车键)

        n往后面继续查找

        N往前面继续查找

4)可视模式:

可以用于复制、剪切

先回到命令模式,再输入v,切换到可视模式

y -- 复制;d -- 剪切;x -- 删除

二.编译器gcc

1.编译流程

从main.c到可执行程序main的过程

        第一步、预处理:gcc -E main.c -o main.i

        第二步、编译(转汇编):gcc -S main.i -o main.s

        第三步、汇编(转二进制):as main.s -o main.o

        第四步、链接(链接库):gcc main.o -o main

2.gcc的相关指令

        -c:只编译,不链接,相当于编译流程的前三步;

        -o:重命名;

        -l(大写的i):后面跟头文件路径;

        -l(小写的L):后面跟库名;

        -L:后面跟库路径(即使是当前路径也要加);

        -g:生成带有调试信息的可执行程序

注:如果用gdb调试,需要加参数-g,例gcc -g main.c默认生成的可执行程序是a.out,但此时生成的a.out就带有调试信息)

三.封装

为了保护源码,方便移植;

一般情况下工程文件中都含有include(存放.h文件)、lib(存放.o文件)、output(main可执行文件)、src(存放.c文件)、kakefile

Linux下库的分类:静态库、动态库

1.静态库:

以空间换时间:在生成可执行程序的时候,复制了一份库到当前的可执行程序中,生成的可执行程序较大,浪费了空间,但是节省时间

编译流程:

    第一步:准备功能函数(不能包含main函数):Fun.c;

    第二步:将功能函数的.c只编译不链接,生成.o;

        gcc -c Fun.c -o Fun.o

    第三步:ar -rc libXXX.a *.o (XXX=库名)

验证库:

    方式1:.h文件没有封装在一起

       gcc main.o -o mian -lXXX -L./

    方式2:.h文件封装到include中,需要指明头文件路径

       gcc main.c -I./include -lXXX -L./

2.动态库

以时间换空间:在生成可执行程序的时候,保留了库中函数的入口到当前的可执行程序中,在真正运行的时候,去相应的库里执行函数,浪费了时间但是节省空间

编译流程:

    第一步:准备功能函数(不能包含main函数):Fun.c

    第二步:将功能函数的.c只编译不链接,生成.o

       gcc -c -fpic Fun.c -o Fun.o

    第三步:打包成库;

       gcc -shared -fpic -o libXXX.so *.o (XXX=库名)

验证库:

    第一步:将库放到指定路径下: sudo mv 整个库名 /usr/lib

    第二步:gcc main.c -o main -lXXX -I./include

四.Gdb调试程序

第一步:使用gdb调试工具,在编译的时候gcc后面需要带-g,生成带有调试信息的可执行程序

第二步:启动gdb

              格式:gdb ./可执行程序

              退出:quit或者q

              清屏:ctrl + l

显示

        list或者l        //显示代码 10 行

        list 行号        //显示该行附近的 10 行

运行:run

设置断点:断点,运行到该行会暂停

        break 行号         //( b 行号)

查看断点:info break          //(info b)

        设置断点: 默认是使能状态

        使能:使该断点起作用

        enable 断点的编号

        失能:使该断点失去作用,不起作用

        disable 断点的编号

删除断点

        delete 断点的编号

        clear 断点的行号

继续运行:cont或c

打印变量的值:print 变量名

调试程序思想1:

        设置断点 + run + print + c

调试程序思想2:单步调试(整体思想:用n来把控全局,遇到自己想进入的子函数的时候,再使用s进入)

        运行:start

        n(next):下一步,按步调试,遇到函数,不会进入函数内部

        s(step):下一步,按步调试,遇到函数,会进入函数内部

        finish:结束当前函数,返回到调用点;

五.makefile

工程管理工具:名字为 makefile 的文件,将你原本给终端写的指令,写入到该文件中,make之后自动执行makefile中的指令。

Makefile 是一个用于自动化构建(包括编译和链接)软件项目的文件。它通常与 make 工具一起使用,make 是一个在 Unix 和类 Unix 系统(如 Linux)中广泛使用的构建工具。通过编写 Makefile,开发人员可以定义构建过程的规则,从而简化构建流程并提高开发效率。

安装makefile:

终端输入下载指令(联网):sudo apt-get install make

makefile 的使用

我觉得使用makefile最主要是分析好目标和依赖。分析怎样通过依赖来得到目标,更容易明白去写相关的文件,或者分析文件。

终端输入指令:vim makefile (表示打开或创建并打开一个 makefile 文件)

:需要严格按照makefile格式去编写代码)

格式 1:

目标:依赖

(输入tab键)命令

格式 2: 没有依赖的目标, 称为伪目标

目标:

(输入tab键)命令

#表示注释

makefile中的变量:

                变量名=原来的内容  例C=gcc

                变量的引用: $(变量名) $(C) 等价于 gcc

特殊变量:

        $@: 目标

        $^: 所有的依赖

        $<:所有依赖中的第一个依赖

%.o:%.c

        gcc -c $< -o $@

打印变量的值:

        echo $(变量名)

        @:运行,但是不打印该行指令

makefile 的运行:

        方式 1: 直接 make , 默认生成的一定是第一个目标

        方式 2: make 目标 , 就是生成该目标

        比如: make clean

        make echo

makefile 的命名:

直接 make:默认在当前路径下,找makefile这个文件,如果找不到makefile,就找Makefile;如果要用其他名字,需要用-f指定

格式:make -f 其他名字的makefile

六.拓展makefile其它的函数

1.wildcard

原型:$(wildcard <pathname>)

功能:查找<pathname>下指定文件

返回:包含路径的所有指定文件

SRCPATH=$(wildcard ./src/*.c)

$(SRCPATH) 等价于 src/main.c src/add.c src/del.c

2.notdir

原型:$(notdir <names...>)

功能:从文件名序列<names>中取出非目录部分。非目录部分是指最后一个反斜杠(“/”)之后的部分。

返回:返回文件名序列<names>的非目录部分

SRCNOPATH=$(notdir $(SRCPATH))

$(SRCNOPATH) 等价于 main.c del.c add.c

3.patsubst

原型:$(patsubst <pattern>,<replacement>,<text>)

功能:查找<text>中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式<pattern>,如果匹配的话,则<replacement>替换。<pattern>可以包括通配符“%”,表示任意长度的字串,按照名字匹配。

返回:函数返回被替换过后的字符串

LIBPATH = $(patsubst %.c ./lib/%.o $(SRCNOPATH))

$(LIBPATH) 等价于 ./lib/main.o ./lib/add.o ./lib/del.o

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值