前置知识
涉及 linux gcc/g++ gdb调试 cmake vscode环境搭建 ...
linux目录结构:
(1)bin:目录中存储的都是一些二进制文件,文件都是可以被运行的。
(2)dev:该目录中主要存放的是外接设备,例如盘、其他的光盘等。
(3)etc:该目录主要存储一些配置文件。(如:网络的配置)
(4)home:家目录,表示除了root用户以外其他用户的家目录,类似于windows下的User/用户目录。
(5)proc:全称process,表示进程,该目录中存储的是Linux运行时候的进程。
(6)root:该目录是root用户自己的家目录。
(7)sbin:全称super binary,该目录也是存储一些可以被执行的二进制文件,但是必须得有super权限的用户才能执行。
(8)tmp:表示“临时”的,当系统运行时候产生的临时文件会在这个目录存着。
(9)usr(Unix System resources):存放的是用户自己安装的软件。类似于windows下的program files。
(10)var:存放的程序/系统的日志文件的目录。
(11)mnt:当外接设备需要挂载的时候,就需要挂载到mnt目录下。
重要指令讲解:
(1)pwd:打印当前终端所在的目录
(2)ls:列出当前工作目录下的文件/文件夹的名称
ls [路径]:列出指定路径下的所有文件/文件夹的名称
# ls 相对路径 ls ./ #【表示当前目录下】 ls ../ #【上一级目录下】 # ls 绝对路径 ls /home = ls /
ls [选项] [路径]:含义:在列出指定路径下的文件/文件夹的名称,并以指定的格式进行显示。
# ls 选项 路径 ls -lah /home # 选项解释: -l:表示list,表示以详细列表的形式进行展示 -a:表示显示所有的文件/文件夹(包含了隐藏文件/文件夹) -h:表示以可读性较高的形式显示 # ls -l 中 “-”表示改行对应的文档类型为文件,“d”表示文档类型为文件夹。 # 在Linux中隐藏文档一般都是以“.”开头
(3)cd:切换当前的工作目录
# 以下两条命令等价,示直接进入当前用户的家目录下【很常用】
cd
cd ~
cd [相对路径]
# 进入到上级目录下
cd ..
# 进入到上级目录中的local目录下
cd ../local
cd [绝对路径]
# 进入到/usr/local目录下
cd /usr/local
(4)mkdir:创建目录
mkdir 路径
mkdir -p 路径:一次性创建多层不存在的目录
# 创建 ~/a/b/c 目录 mkdir -p ~/a/b/c
mkdir 路径1 [路径2] [路径3]:一次性创建多个目录
# 在当前目录分别创建a、b、c三个文件夹 mkdir a b c
gcc 编译器
实际使用中:
(1)使用 gcc 指令编译 C 代码
(2)使用 g++指令编译 C++ 代码
编译过程:
(1)预处理-Pre-Processing //.i文件
# -E 选项指示编译器仅对输入文件进行预处理 g++ -E test.cpp -o test.i //.i文件
(2)编译-Compiling // .s文件
# -S 编译选项告诉 g++ 在为 C++ 代码产生了汇编语言文件后停止编译 # g++ 产生的汇编语言文件的缺省扩展名是 .s g++ -S test.i -o test.s
(3)汇编-Assembling // .o文件
# -c 选项告诉 g++ 仅把源代码编译为 机器语言 的目标代码 # 缺省时 g++ 建立的目标代码文件有一个 .o 的扩展名。 g++ -c test.s -o test.o
(4)链接-Linking // bin文件
# -o 编译选项来为将产生的可执行文件用指定的文件名
g++ test.o -o test
以上四步可以用一步完成
g++ test.cpp -o test
【实战】g++命令行编译
目录结构:

一、直接编译:
(1)最简单的编译并运行

(2)添加参数

会输出warning
二、生成库文件并编译:
(1)链接静态链接库生成可执行文件:
先进入src:

生成.o文件:

生成静态链接库:

链接,生成可执行文件static_main
头文件位置-Iinclude 链接库位置libswap.a在src内,所以-Lsrc -lswap(-l自动省略lib和.a)

(2)链接动态库生成可执行文件:
先进入src:
生成.o文件和动态链接库(-shared):
-fPIC表示与路径无关,任何路径可以调用swap.o

或分两步:

链接生成可执行文件share_main

生成的可执行文件,每次都要指明动态链接库的位置

【实战】命令行调试

-g才能被gdb调试
## gdb +文件名 进入进入gdb调试程序 ## 以下命令后括号内为命令的简化使用,比如run(r),直接输入命令 r 就代表命令run $(gdb)quit(q) # 退出gdb q $(gdb)run(r) # 重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件) r $(gdb)break+num(b) # 在第num行设置断点 b 13 $(gdb)info breakpoints # 查看当前设置的所有断点 i b $(gdb)print(p) # 打印值及地址 p i(p+变量名) $(gdb)continue(c) # 继续运行 ## 回车键会继续上次执行的命令 $(gdb)display # 追踪查看具体变量值 $(gdb)list(l) # 查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数)
VSCode:
四部分,编辑区,侧边栏,菜单区,状态栏
ctrl + shift + p 下拉菜单
ctrl + / 注释
ctrl + alt + 上下,上下移动一行代码
ctrl + ` 打开终端
ctrl + B 开关侧边栏
ctrl + shift + i 代码格式化
ctrl + enter 在当前行下面插入一行
ctrl + shift +enter 在当前行上面插入一行
fn + f2 给所有某个相同变量重命名
fn + f11全屏
CMake:
CMake是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装(编译过程)。
cmake_minimum_required 指定CMake的最小版本要求
project 定义工程名称,并可指定工程支持的语言
include_directories 向工程添加多个特定的头文件搜索路径 --->相当于指定g++编译器的-I参数
link_directories 向工程添加多个特定的库文件搜索路径 --->相当于指定g++编译器的-L参数
add_executable 生成可执行文件
add_compile_options 添加编译参数
# 添加编译参数 -Wall -std=c++11 -O2 add_compile_options(-Wall -std=c++11 -O2)

(1)内部构建:
cmake . 对当前目录下的CMakeLists.txt目录进行编译

make 生成可执行文件

(2)外部构建:
## 外部构建 # 1. 在当前目录下,创建build文件夹 mkdir build # 2. 进入到build文件夹 cd build # 3. 编译上级目录的CMakeLists.txt,生成Makefile和其他文件 cmake .. # 4. 执行make命令,生成target make


浙公网安备 33010602011771号