前言
目前看来,linux编程的快乐源自于vim编辑器、gcc编译器、gdb调试器,这些怎么用的呢,一起来看看。
一、VIM编辑器
模式转换
编辑模式 ->esc-> 一般模式 -> shift+‘;’ -> 命令行模式
编辑模式 <-i(当前位置)<- 一般模式 <-esc<- 命令行模式
---------------a(下一格进入)
---------------o(下一行进入)
命令行操作
set nu 显示行号
w 保存文件
q 退出vim
i 强制执行
%s/test/hello/g 全文test替换为hello
5,10 s/test/hello/g 5~10行的test替换为hello
行号 跳转行号行
vs 左右分屏
sp 上下分屏
ctrl+ww 屏幕切换
ctrl+w c 关闭当前分屏
/hello 搜索hello字符,n向下循环,N向上寻找
一般模式操作
h,j,k,l 光标移动
gg 光标至文件开头
G 光标至文件结尾
15 gg 光标跳到15行
15 G 光标跳到15行
15 'enter' 光标下移15行
v 自动选取
shift+v 行选取
ctrl+v 列选取
y 复制选取内容
yy 复制当前行
nyy 复制当前行与下n行
x 剪切选取内容
dd 剪切当前行
ndd 剪切当前行与下n行
p 粘贴
u 撤回操作
ctrl+r 重新操作
ZZ 保存退出
= 行对齐
gg=G 文本自动对齐
编辑模式操作
ctrl+n 自动补齐已输入内容
二、gcc编译器
1.gcc编译模式
预处理
gcc -E hello.c -o hello.i
#include <xxx.h>
先找-i目录,再找系统目录
#include "xxx.h"
先找-i目录,再找当前目录,最后找系统目录,适用于自定义文件
gcc -E -o xxx.i xxx.c
优点:定义宏函数后,预处理将宏函数进行替换,在预处理可查看是否替换正确
编译成汇编语言
gcc -S hello.i -o hello.s
汇编二进制
gcc -c hello.s -o hello.o
链接库函数
gcc hello.o -o hello
链接数学函数库
gcc circle.c -o circle -lm
在指定目录检索后加载自建函数
gcc -I /home/tarena/include main.c a.c b.c -o main
生成包含调试信息的程序
gcc -g hello.c hello
程序运行
./main
2.gcc编译操作
编译好习惯
预处理-汇编-链接函数库
大体量程序编译——Makefile
当程序体量非常大,源文件.c - 异常的多
gcc a.c b.c c.c d.c e.c ……,编译过程异常繁琐,.c文件不在一个文件夹中,等等问题,令编译变得异常困难
使用makefile对编译代码进行优化
什么是makefile
存储编译规则的文本文件
给make 命令使用,根据makefile脚本定义的规则,完成从依赖文件到目标文件的转换
makefile基本语法
目标:依赖
<制表符>命令1
<制表符>命令2
目标文件:一般为可执行文件
vim hello.c
#include <stdio.h>
int main(void){
printf("hello world\n");
return 0;
}
vim Makefile开头字母建议大写
#Makefile的注释
#vim Makefile
#make
#./hello
#分布编译的方式
#时间戳,目标文件最新时显示up to date
#编译规则1
hello:hello.o
gcc hello.o -o hello
#编译规则2
hello.o:hello.c
gcc -c hello.c -o hello.o
make 指令只会寻找makefile 编译即可
二、gdb调试器
gdb ./main 进入调试器
l list 显示多行源代码
b break 设置断点,b 15是15行设置断点,b main是将断点设置在main函数上
r run 开始程序运行
s step 单步进入
n next 单步跳出
p print 打印变量值
c continue 继续程序运行,直到下一断点
q quit 退出gdb调试器
总结
通过vim快速进行文件编辑,gcc配合makefile实现文件快速编译,gdb进行文件调试