Linux基础之相关编译编译工具的基础使用
文章目录
前言
vim编辑器
底行模式
命令模式:
gcc编译
gdb调试
Makefile
总结
前言
大家好,欢迎来到TheBlob的博客。时隔大半个月再次发Linux的文章,我也一度认为自己写的这些文章对各位没啥用处,因为与其说是文章,倒不如说是我的电子笔记更为合适。经过内心挣扎,决定还是继续发这些基础,希望能够帮助一些刚想入手却无从下手的小伙伴。话不多说开始献丑啦!
补充前面没有写上的基础命令
man ascii 查看ASCII
ctrl + C 强行终止
shift + 粘贴 从windows复制进去
在vim里面shift + k 进去看相关函数的用法
file xx 查看文件
readelf -a xx 查看可执行文件的elf
vim编辑器
插入模式
i 从当前光标位置插入
I 从光标行头插入
a 从当前光标位置的后一个字符进行插入
A 从光标行尾插入
o 从光标的下一个行添加新行插入
O 从光标的上一行添加新行插入
底行模式
q 退出
w 保存
wq 保存并退出
q! 强制退出
wq! 强制保存并退出
x 保存并退出
w hello.c 将编辑内容存到hello.c上
vs hello.c 分屏编辑
set nonu 临时取消行号
%s/nihao/hello/g 将文件全文的nihao变成hello
s/nihao/hello/g 将光标所在行nihao变成hello
/hello 去文本搜索hello字符
set key=XXXXXX 设密码
r 文件名 复制文件
例: r test.c 将test.c的内容复制到当前文件
命令模式:
yy 复制一行
nyy 复制n行
dd 切剪/删除一行
ndd 剪切/删除n行
p 粘贴
u 撤销
gg 回到文件头部
gg=G 自动排版(自动缩进)
G 回到文件尾部
r 替换一个字符
R 进入到替换模式
光标定位到行尾 shift + 4
光标定位到行头 shift + 6
光标定位到最后一行 hift + g (前面加 数字 可以定位到对应 行号)
定位到开头 gg
光标快速移动 b w
光标上下左右 h(左) j(下) k(上) l(右)
删除光标所在位置后的字符 x
删除光标所在位置之前的字符 X
大小写切换 shift + ~
多开文件操作:
vs 文件名
切换文件 ctrl ww
不退出编译程序 !gcc 文件名
不退出查看函数 !man 函数名 或 鼠标点到函数 shift + k 进入
gcc编译器
预处理 编译 汇编 链接
*预处理:
*加载头文件
*宏展开
*删除注释
*处理了条件编译
gcc -E xx.c -o xx.i
*编译:
将代码编译成为汇编代码
gcc -S xx.i -o xx.s
或者: gcc -S xx.c -o xx.s
*汇编:
将汇编代码汇编成为可重定向文件
gcc -c xx.s -o xx.o
或者 gcc -c xx.c -o xx.o
---->不会检测函数是否存在,是需声明即可
*链接:
将各个可重定向文件链接成为可执行文件(目标文件)
gcc xx.o yy.o zz.o -o xx
或者: gcc xx.c yy.c zz.c -o xx
-----> 会去检测声明的对象或者函数是否存在
补充:
gcc -v -Wall -O0 -g -E //预处理-S //编译-c //汇编 -o //生成-v //详细显示-Wall //详细警告-On // n是个数字 优化程度-O0 不优化 -O1 -O2 数字越大,优化程度越高,编译时间越长,执行时间越短-g
gdb调试
安装gdb
sudo apt-get install gdb
*编译的时候,后面要加 -g
*为什么要用?
一步一步调试,查找段错误的位置
*如何使用:
gdb 可执行文件
例子:
gdb xx
l : list显示代码r : run 运行 start : 启动 n : next 不进入函数,直接执行s : step 进入到每一个函数里面p 变量名字 : printf 变量例子 :p i 打印出i的值 b n : breakpoint n: 行 例子:b 15 i b : infomation breakpoint 查看所有的断点d 编号 : delete num例子:d 3 //删除编号为3的断点 c : continue 继续 一个断q : quit : 退出
Makefile
*> make是一个项目管理工具
*> 使用:
*》安装make
sudo apt-get install make
*》书写 Makefile 的文件
*》按照make的规则,在Makefile中书写 代码
*Makefile基本姿势:
目标 : 依赖
(tab键) 命令
*声明:
依赖可以没有
命令也可以没有
目标就是我们要生成的东西
如果不需要生成目标,称该目标为伪目标
*make的使用:
make 目标 :
查看该目标文件是否存在,如果存在是否为最新。
如果不存在,则去生成,如果不需要生成,则该目标为伪目标
如果目标是整个Makefile中的第一个目标, 可以省略不写
优势:时间戳管理方式:
如果依赖没有目标新,那么就不需要重复编译,否则谁最新就编译谁
依赖文件必须存在,如果依赖不存在,make想方设法去生成(将其作为目标去生成)
cc -c -o xx.o xx.c
*伪目标:
我们不需要生成该文件,如果在项目中有该文件,则该伪目标由于没有依赖,永远是最新,顾不再执行,解决方式
.PHONY : 伪目标
* 变量赋值:
* 简单赋值
:= 在当前行有效
* 递归赋值
= 递归查找某变量的最后一个值
* 条件赋值
?= 如果某变量已经定义,那么该语句无效
* 追加赋值
+= 对某个变量进行追加操作
* 如果想隐藏命令(只执行,不显示),在命令前面加上@
echo : 打印的命令
$^ ---> 代表所有的依赖
$@ ---> 代表目标
$< ---> 代表第一个依赖
make -C 文件夹(目录)
-----》执行该 目录 下面的 Makefile下的第一个目标
make -C 文件夹(目录) 目标
-----》执行该 目录 下面的 Makefile下的目标
友情提示:
对于刚开始学的时候可以先把通讯录这种C语言初学者的小项目进行管理来练手,初步的熟悉一下Makefile的相关格式。
总结
以上就是Linux中相关工具的基本操作了,掌握了这些能够满足处于新手阶段在Linux上编写、调试C语言代码、并且还能初步了解项目管理。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
