Title

前置知识

涉及 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

 

 

posted @ 2023-11-29 17:16  长大想当太空人  阅读(55)  评论(0)    收藏  举报