linux环境下:C++ 开发,vim操作&makefile写法&GDB使用

一.Vim编辑器常用快捷键

快捷键 功能
ESC 普通模式
i 插入模式
w 保存
q 退出
wqa 多个窗口保存关闭
hor 光标左移
jor 光标下移
kor 光标上移
lor 光标右移
u 撤销
ctrl+r 返回
/ 查找
ctrl+v 方向键 I "想输入的字符" ESC ESC 在多段行首加入某字符(用于注释)
ctrl+v 方向键 d 删除多段行首某字符(用于取消注释)
v 方向键 选择代码块
y 复制
x 剪切
p 粘贴
vs: file文件名 水平分屏
ctrl+w h/l 光标选择左/右分屏
ctrl+w H/L 将当前分屏左移/右移

二. gcc/g++常用命令

gcc用于c工程,g++用于C++工程
假设当前C++工程文件为:头文件 time.h,源文件 time.cpp usetime.cpp
生成二进制可执行文件helloworld步骤:

  1. g++ -c time.cpp -o time.o
    g++ -c usetime.cpp -o usetime.o
  2. g++ -g time.o usetime.o -o helloworld
  3. ./helloworld

第一步中由time.cpp usetime.cpp生成的time.o usetime.o为中间件
第二步链接生成二进制可执行文件time.o-g 目的是可以用于gdb调试

如果要将time.cpp编译成动态链接库libtime.so,则执行以下命令:

  1. g++ -o libtime.so -fPIC -shared time.cpp

若usetime.cpp想调用libtime.so动态链接库(usetime.cpp与libtime.so在同一级目录),执行以下命令:其中-Wl . -L . 点号 .指当前目录

  1. g++ usetime.cpp -o out -Wl,-rpath=. -L. -ltime
    若将libtime.so拷贝到 /usr/lib 目录中,执行以下命令:

  2. g++ usetime.cpp -o out -ltime

三.Makefile编写1

Makefile编写基于gcc/g++命令
例如C++工程文件目录为Self_Makeflie
Self_Makefile文件夹下含有
头文件目录::include include/time.h
源程序目录:src src/time.cpp usetime.cpp
二进制可执行文件夹:bin
编译生成的中间件: obj
链接库:lib
Makefile: Makefile

Makefile写法如下:

基本规则:
目标:依赖1 依赖2。。。
命令

$(patsubst 原模式, 目标模式, 文件列表)

  • wildcard 通用扩展符,寻找目录下所有.cpp文件
  • notdir去除指定文件的地址,如: 将./src/time.cpp转换成 time.cpp
  • patsubst 生成指定目录中以.cpp为后缀转换成以.o为后缀的文件名,如:将time.cpp转换成time.o
  • %.xx 目录下所有.xx文件
  • $^ 所有依赖项 (一般用于生成二进制可执行文件时的依赖项,因为依赖多个.o文件)
  • $< 第一个依赖项 (一般用于生成.o文件时的依赖项,因为依赖单个.cpp文件)
  • $@ 生成目标项
INC_DIR=./include
SRC_DIR=./src
OBJ_DIR=./obj
BIN_DIR=./bin

SRC=${wildcard ${SRC_DIR}/*.cpp}
OBJ=${patsubst %.cpp, ${OBJ_DIR}/%.o, ${notdir ${SRC}}}

TARGET=out
BIN_TARGET=${BIN_DIR}/${TARGET}

CC=g++
CFLAGS= -g -I${INC_DIR}

${BIN_TARGET}:${OBJ}
#	${CC} ${OBJ} -o ${BIN_TARGET} 
	${CC} $^ -o $@

${OBJ_DIR}/%.o:${SRC_DIR}/%.cpp
	${CC} ${CFLAGS} -c $< -o $@    

.PHONY:clean
clean:
	-rm -rf ${OBJ} ${BIN_TARGET}

在这里插入图片描述

要编译工程生成可执行文件,则在含有Makefile的目录下执行命令make:
pi@raspberrypi:~/CPlus_Project/Self_Makefile $ make 
g++ -g -I./include -c src/time.cpp -o obj/time.o    
g++ -g -I./include -c src/usetime.cpp -o obj/usetime.o    
g++ obj/time.o obj/usetime.o -o bin/out

此时生成的time.o usetime.o文件都存放在obj文件夹内
此时生成的二进制可执行文件out存放在bin文件夹内

要清除生成的中间件.obj文件及可执行文件则执行命令make clean:
pi@raspberrypi:~/CPlus_Project/Self_Makefile $ make clean 
rm -rf  ./obj/time.o  ./obj/usetime.o ./bin/out

清除了obj文件夹内的中间文件time.o usetime.o以及bin文件夹内的out

四.GDB调试快捷键

指令 功能
gdbtui filename 进入调试
break 行数 设置断点
info b 查看断点
delete 断点标号 删除断点
ctrl+l 刷新代码块
display 变量名 查看变量
undisplay 变量标号 不查看变量
s 单步运行
next 不进入子函数运行
cont 从当前断点运行到下一断点
focus cmd 将光标移位到cmd
focus src 将光标移位到src

在这里插入图片描述


  1. Makefile参考链接 ↩︎

猜你喜欢

转载自blog.csdn.net/qq_23023937/article/details/108683997