Linux开发工具

 Linux 软件包管理器 yum:

安装文件:sudo yum install lrzsz
删除文件:sudo yum remove lrzsz
查看软件包:yum list(yum search) | grep lrzsz

lrzsz--->文件传输工具:

rz :将主机文件传送到服务器上
sz:将服务器的文件传送到主机上

vim--->编辑器(Linux下写代码的工具)

vim操作模式有12种, 必用的有 三种:普通模式,插入模式,底行模式
普通模式:进行一些命令操作; 插入模式:编辑文件内容; 底行模式:保存以及退出编辑

普通模式切换插入模式的过程: 

1:vim filename 打开文件,文件不存在不要紧,默认会创建不存在的文件
2.打开一个文件后,默认处于 普通模式下,可以使用 i a o / I A O 切换到插入模式
     i:从光标位置开始插入;   a:光标向后移动一个字符开始插入;   o:在光标所在行下方新建一行开始插入
3.编辑完毕后,使用 esc回到普通模式
4.输入英文冒号,切换低行模式 
:w 保存
:q 退出编辑
:wq 保存并退出
:q! 强制退出不保存

 gcc/g++编译器:(注意:不同的编译器不同的语言不能串着使用)

编译器如何将高级语言解释成为机器指令:

  1. 预处理:进行宏替换,去掉注释,引入头文件;(gcc -E main.c -o main.i)
  2. 编译:进行语言语义纠错,没有错误则将高级语言代码解释为汇编指令;(gcc -S main.i -o main.s)
  3. 汇编:将汇编指令解释为二进制机器指令;(gcc -c main.s -o main.o)
  4. 链接:将我们的机器指令与所适用的库函数对应库文件中的机器指令打包到一起组织成为可执行程序;(gcc main.o -o main)

 链接其实就是把所有代码合到一起,尤其是要把库文件中的代码拿过来,但实际上有区别:

静态库:链接静态库,将静态库中用到的函数指令直接写入程序中,生成的程序比较大,在内存中可能存在一些函数指令冗余,但是运行时不需要依赖库的存在;
动态库:链接动态库,将动态库中的函数符号表记录到程序中,运行程序时连带依赖的动态库一起加载到内存中,可以与其他程序在内存中共用动态库;
而gcc编译器默认的连接方式是---动态链接

gcc常见的编译选项:  

-E  只激活预处理
-S  编译到汇编语言不进行汇编和链接
-c   进行到汇编完毕就结束
-o  指定要生成的文件对象文件

gdb:调试工具,调试程序的运行过程

调试程序前提:一个程序是可被调试的(代码无优化,加入调试符号信息)debug版本程序
1.加载调试程序:gdb ./main
2.开始调试:run 直接运行;  start 开始逐步调试
3.逐步调试涉及的指令:
n--->next:下一步;(逐过程)     step :下一步;(逐语句) 
until file:line:直接运行到指定文件的指定行             list file:line :查看文件指定行的代码
continue:从当前调试位置开始继续运行                  backtrace:查看函数调用栈,快速定位程序崩溃位置
break:打断点;break main.c:12 给12行打断点,运行到12行会停下来;
info break:查看断点信息                                         print:打印变量内容,还可以修改变量数据;
                                       

make/makefile : 项目自动化构建具

makefile :文本文件,记录一个项目的构建规则( 显式规则、隐晦规则、变量定义、文件指示和注释),保存了编译器和连接器的参数选择;
make:是一个makefile的解释程序找到当前目录下的makefile进行逐行解释,执行指令完成项目的构建

makefile的编写规则:

#是注释       
预定义变量
$^ 表示所有依赖对象
$@ 表示目标对象
$< 所有依赖对象中的第一个
目标对象:依赖对象;    [tab]要执行的命令
伪对象:表示当前的目标对象,并不是一个需要生成的实体目标对象,根本目的是为了解除目标对象与实体的关系;
               常用于项目清理的clean对象;
               使用.PHONY来声明伪对象

 make:makefile解释器,用于解释makefile中的项目构建规则,完成项目的构建

  1. make会根据目标对象和依赖对象的最后一次修改时间来进行判断,判断目标对象是否需要重新生成;
  2. make后边跟上目标对象的名称,表示在makefile中寻找对应的目标对象生成规则,生成指定目标对象;
  3. make找到makefile中的第一个目标对象,和其生成规则,进行指令执行,生成之后,则退出,意味着makefile中就算有多个目标 对象,他也只生成一个;
  4. make虽然只生成第一个目标对象,但是如果他的依赖对象不存在,他也会向下递归寻找依赖对象的生成规则,先将依赖对象生成,再去生成目标对象;

你可能感兴趣的:(笔记,linux)