【Linux】基础02


Linux编译和调试

VI编辑文件

vi : 进入文件编辑 是命令行模式

i :从光标处进入插入模式

dd : 删除光标所在行 n dd删除指定行数

Esc : 退出插入模式

冒号进入末行模式

:wq : 保存退出

:q : 未修改文件可以退出

:q!: 不保存退出

分屏操作:sp 上下分屏 vsp左右分屏

在末行模式下 :sp 文件名称

ctrl + ww 切换屏幕

VIM安装

VIM 是一款功能强大的文本编辑器。

VIM 安装必须在 ~ 路径下


gcc编译命令

gcc main.c          // 编译main.c 文件不指定名称则生成a.out 文件

gcc main.c -o myapp //编译main.c生成编译文件myapp

./myapp             //执行编译文件myapp

利用-D等 编译指令 可以实现同一套代码输出不同结果

编译原理

gcc可以同时编译多个源文件源文件都需要编译

  • GCC 编译过程主要分为四个阶段:预处理、编译、汇编 和链接 。
  • 这四个阶段可以分别用不同的 GCC 选项来单独执行,也可以让 GCC 自动依次执行完成整个编译过程。

GDB调试

gdb + 可执行文件名字

当前文件编译时候未带-g调试信息 故不能调试该文件

list 列出代码

start 开始/run 开始 前者直接停在第一行 后者到第一个断点

step 逐语句调试

next 逐过程调试

p 监控一次

diaplay 持续监控 undisplay 结束监控

info 断点信息

b 下断点

给权限

disable 不好使断点

able 好用断点


makefile

Makefile 是一个文本形式的自动化构建工具脚本,主要用于自动化编译和构建软件项目。在一个包含多个源文件的项目中,手动去编译每个文件并将它们链接起来是非常繁琐且容易出错的,Makefile 可以帮助开发者定义好这些编译规则和依赖关系,让构建过程变得简单高效。

makefile优点

1 便捷的管理代码 不用复杂的重写编译命令

2 重用性极强 可以反复使用编译不同的工程

3 大大节省编译时间


编译时间

预处理时间+

编译期(生成.o文件)时间+

汇编时间+

链接(将.o文件和依赖库文件连接成可执行文件)时间

节省时间方法

节省编译期的时间 采用空间换时间第一次编译时候不会节省空间

编译成功会生成.o文件保存下来 再次编译时候识别修改源文件,只编译修改的源文件

修改次数少,节省时间。


makefile三要素

1 目标

最终事情:完成编译 形成可执行文件

2 依赖

源文件 资源文件

3 命令

根据依赖生成可执行文件要执行的命令


makefile文件创建和编写

makefile编写

1 注释使用#

2 文件名必须是makefile 或者 Makefile (靠名字识别文件makefile)

3 执行makefile文件 在对于路径执行make

格式

目标:依赖 依赖 依赖

(tab):命令

分成链接期和编译期

再次make时候只编译修改的文件

makefile文件执行原理和注意事项

最终目标写在最上面 makefile是自顶向下执行的

先看 最终目标的依赖 依赖作为目标 在下面找 目标 执行可以生成目标的文件

如果有多个目标目标直接有多个主从关系

makefile中变量定义和使用

1 自定义变量

无需指定类型,默认都是字符串类型

变量名可以由字母,数子,下划线组成 不可以数字开头 一般全大写

使用变量$(变量名)

2 内置变量

$@ 代表目标名 先有一个目标名 其他的目标名要被代替

$^ 代表依赖项

$< 代表依赖项第一项

makefile内置函数和内建语法

内置函数和内建语法

1 文件名处理函数 (获取文件名称)wildcard

SRCFILE =$(wildcard 参数*.c)

wildcard 可以遍历文件夹 可有获取文件.c名字 保存到SRCFILE变量


2 字符串处理函数 patsubst

DSTFILE =(patsubst %.c,%.o,(SRCFILE));

把srcfile中.c换成.o

结果存到dstfile

使用$(DSTFILE)


makefile脚本语言

是低级语言 不会报错 之后返回"结果没出现" 至于哪没出不知道

只能使用结果分析 错误

常用变量

TARTGRT=myapp 存储目标名字

CC=gcc 存储编译器命令

INCLUDE_PATH=../include 存储头文件路径

LIBRARY_PATH=../lib 存储库文件路径

INSTALL_PATH=../user/bin 存储安装路径

CFLAGS=-I$(INCLUDE_PATH) -C -Wall 存储编译选项

CPPFLGS=-D 存储预处理选项

相关推荐
正在走向自律29 分钟前
阿里云ESC服务器一次性全部迁移到另一个ESC
服务器·阿里云·云计算
gywl1 小时前
openEuler VM虚拟机操作(期末考试)
linux·服务器·网络·windows·http·centos
青木沐1 小时前
Jenkins介绍
运维·jenkins
WTT00112 小时前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
苹果醋32 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
了一li2 小时前
Qt中的QProcess与Boost.Interprocess:实现多进程编程
服务器·数据库·qt
日记跟新中2 小时前
Ubuntu20.04 修改root密码
linux·运维·服务器
唐小旭2 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python
码农君莫笑2 小时前
信管通低代码信息管理系统应用平台
linux·数据库·windows·低代码·c#·.net·visual studio