当前位置: 首页 > news >正文

linux并发服务器 —— Makefile与GDB调试(二)

Makefile

Makefile:定义规则指定文件的编译顺序;类似shell脚本,执行操作系统命令

优点:自动化编译——通过make(解释Makefile文件中指令的命令)命令完全编译整个工程,提高软件开发效率;

如何写Makefile

文件命名:makefile/Makefile

一个Makefile可以有一个/多个规则

目标...:依赖...

        命令(shell 命令)

        ...

目标:要生成的文件

依赖:生成目标所需的文件/目标

命令:通过命令对依赖操作生成目标

在目录在创建Makefile文件,里面的内容如下:

可能会出现 E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend)

 sudo rm /var/lib/dpkg/lock-frontend

 随后sudo apt install make 即可安装;

在当前目录下执行make指令(会自动寻找当前目录下的Makefile):

Makefile的工作原理

1. 命令执行前,先检查规则中的依赖是否存在

若存在则执行命令

若不存在,往下看别的规则,看能不能生成尚不存在的依赖

默认执行第一条规则,与第一条规则没有关系的规则不会执行

2. 检查更新,在执行规则命令,比较目标和依赖文件的时间;依赖晚于目标则重新生成目标,否则规则中的命令不执行(检测更新机制)

Makefile中的变量

自定义变量:变量名=变量值 ; $(变量名) = 变量值

模式匹配:eg. %.o:%.c

$(wildcard PATTERN ...) - 获取指定目录下指定类型的文件列表

$(patsubst <pattern>,<replacement>,<text>) - 查text单词,匹配pattern用replacement替换

 首先读取当前目录下的所有.c文件为src,通过patsubst将.c替换为.o后根据变量名写规则,通过模式匹配来进行其余规则指定

可以通过在最后添加

.PHONY:clean // 伪目标

clean:

        rm $(objs) -f删除生成的.o文件;

make clean

GDB调试

GDB是GNU提供的调试工具;

 准备工作

1. 关掉编译器优化选项 -o

2. 打开调式选项 -g(在可执行文件中加入源代码信息)

3. -Wall 打开所有warning

gcc -g -Wall program.c -o program

调式时必须保证能够找到源文件

GDB常用相关命令

gcc -g -Wall test.c -o testgdb test

断点在GDB退出后会自动清除

 要跳出函数体或循环需要先清理断点

 

http://www.lryc.cn/news/149229.html

相关文章:

  • Ansible学习笔记14
  • docker 安装 mysql 并挂载 配置文件和数据目录
  • 代码随想录训练营 DP01
  • github+hexo 博客搭建
  • Spring Security bug记录:antMatchers找不到符号(已解决)
  • kaggle新赛:谷歌AI模型运行时间预测赛题解析【数据挖掘】
  • mysql性能测试工具选择 mysql软件测试
  • GPS全球卫星定位系统原理
  • Ubuntu学习---跟着绍发学linux课程记录(第一部分)
  • Ubuntu20.04下安装google输入法
  • Ros noetic 机器人坐标记录运动路径和发布 实战教程(A)
  • Java“牵手”1688淘口令转换API接口数据,1688API接口申请指南
  • Python实现自动关键词提取
  • java八股文面试[多线程]——sleep wait join yield
  • Vue/React 项目部署到服务器后,刷新页面出现404报错
  • 通信笔记:RSRP、RSRQ、RSNNR
  • 前端:html实现页面切换、顶部标签栏(可删、可切换,点击左侧超链接出现标签栏)
  • python print格式化输出
  • 钢筋水泥中的信仰--爱摸鱼的美工(16)
  • ViT论文Pytorch代码解读
  • Harbor查看密码
  • Boa服务器与Cgi简介
  • 入门vue——创建vue脚手架项目 以及 用tomcat和nginx分别部署vue项目(vue2)
  • oracle中的(+)
  • 五种永久免费 内网穿透傻瓜式使用
  • 【Java基础增强】Stream流
  • reduxreact-redux
  • go中的并发
  • 开启EMQX的SSL模式及SSL证书生成流程
  • 4 | Java Spark实现 WordCount