在Linux系统进行开发常识

一、Linux目录结构

Bin:全称binary,含义是二进制。该目录中存储的都是一些二进制文件,文件都是可以被运行
的。
Dev:该目录中主要存放的是外接设备,例如盘、其他的光盘等。在其中的外接设备是不能直接被
使用的,需要挂载(类似window下的分配盘符)。
Etc:该目录主要存储一些配置文件
Home:表示“家”,表示除了root用户以外其他用户的家目录,类似于windows下的User/用户目
录。
Proc:全称process,表示进程,该目录中存储的是Linux运行时候的进程
Root:该目录是root用户自己的家目录
Sbin:全称super binary,该目录也是存储一些可以被执行的二进制文件,但是必须得有super权
限的用户才能执行。
Tmp:表示“临时”的,当系统运行时候产生的临时文件会在这个目录存着。
Usr:存放的是用户自己安装的软件。类似于windows下的program files。
Var:存放的程序/系统的日志文件的目录。
Mnt:当外接设备需要挂载的时候,就需要挂载到mnt目录下。

二、Linux基本指令

1、pwd               打印当前终端所在目录

eg: pwd

2、ls

ls                       列出当前目录下所有的文件/文件夹的名称

ls [路径名]         列出指定路径下的所有文件/文件夹名称

eg: ls ./              列出当前目录下文件/文件名  ls ../                 列出上一级目录下文件/文件夹

                        【一个点表示上前目录,两个点表示上一级目录】

ls [选项] [路径]  以指定的格式列出指定路径下的所有文件/文件夹名

eg:ls -lah /home
选项解释:
-l:表示list,表示以详细列表的形式进行展示
-a:表示显示所有的文件/文件夹(包含了隐藏文件/文件夹)
-h:表示以可读性较高的形式显示
# ls -l 中 “-”表示改行对应的文档类型为文件,“d”表示文档类型为文件夹。

3、cd

cd 或 cd ~          直接进入家目录

cd ..                   返回上级目录

cd [路径名]        进入指定目录路径

4、mkdir              创建目录

mkdir  myfolder    当前目录下创建myfolder目录

mkdir ~p a/b/c      创建a/b/c目录,一次性创建多层目录

mkdir [路径1] [路径2] [路径3]  一次性创建多个目录

 5、 touch                           创建文件

touch hello.cpp                   在当前目录下创建hello.cpp文件

touch  [路径] [文件名]          在路径目录下创建文件

6、 rm                                 删除文件/目录

rm myfile                             删除当前路径下myfile文件

rm  /hello/myfile                  删除hello目录下的myfile文件

rm -rf myfolder                    删除当前路径下的myfolder目录

7、cp                                         复制文件/文件夹

cp  [被复制的文件路径]  [文件被复制到的路径]

cp  /home/hello/myfile  ./           将myfile文件复制到当前目录下

cp -r [被复制的文件夹路径] [文件夹被复制到的路径]  -r 参数用于复制文件夹

cp -r /home/bing/myfolder /      复制/home/bing/myfolder文件夹到根目录/下 

 8、mv                                         移动文件到新位置或重命名文件

mv [需要移动的文件路径] [需要保存的位置路径]
mv myfile /myfile                          移动当前目录下myfile文件到根目录/下
mv myfolder /myfolder                 移动当前目录下myfolder文件夹到根目录/下
mv myfile myfile007                     移动当前目录下myfile到根目录/下,并重命名为myfile007

9、man                                 查看命令的操作手册
man ls                                   查看ls命令的手册
man cd                                  查看cd命令的手册
man man                               查看man命令的手册

三、g++编译C++代码

(1)编译过程

1. 预处理-Pre-Processing //生成.i文件

# -E 选项指示编译器仅对输入文件进行预处理
g++  -E test.cpp  -o test.i  //.i文件

预处理作用:

#将所有的“#define”删除,并且展开所有的宏定义
#处理所有的条件编译指令,比如“#if”、“#ifdef”、“#elif”、“#else”、“#endif”
#处理“#include”预编译指令,将被包含的头文件插入到该编译指令的位置。(这个过程是递归进行的,因为被包含的文件可能还包含了其他文件)
#删除所有的注释“//”和“/* */”。
#添加行号和文件名标识,方便后边编译时编译器产生调试用的行号心意以及编译时产生编译错误或警告时能够显示行号。
#保留所有的#pragma编译指令,因为编译器需要使用它们。
 

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

链接作用:

将各个模块之间相互引用的部分正确的衔接起来。它的工作就是把一些指令对其他符号地址的引用加以修正。链接过程主要包括了地址和空间分配符号决议重定向

(2)g++的一些重要编译参数

 -g              编译带调试信息的可执行文件

 -O[n]         优化源代码

  1. # -O 选项告诉 g++ 对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快。 -O2
  2. 选项告诉 g++ 产生尽可能小和尽可能快的代码。 如-O2,-O3,-On(n 常为0–3)
  3. # -O 同时减小代码的长度和执行时间,其效果等价于-O1
  4. # -O0 表示不做优化
  5. # -O1 为默认优化
  6. # -O2 除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等。
  7. # -O3 则包括循环展开和其他一些与处理特性相关的优化工作。
  8. # 选项将使编译的速度比使用 -O 时慢, 但通常产生的代码执行速度会更快

-l 和 -L 指定库文件 | 指定库文件路径

# 链接glog库
g++ -lglog test.cpp

     

-I指定头文件搜索目录

#当头文件不在编译文件的目录下时,需要指定搜索的头文件目录

-Wall 打印警告信息

# 打印出gcc提供的警告信息
g++ -Wall test.cpp

-w 关闭警告信息

# 关闭所有警告信息
g++ -w test.cpp

-o 指定输出文件名

# 指定输出可执行文件名为test
g++ test.cpp -o test

-D 定义宏

#-DDEBUG 定义DEBUG宏,可能文件中有DEBUG宏部分的相关信息,用个DDEBUG来选择开启或关闭

-std=c++11 设置编译标准

# 使用 c++11 标准编译 test.cpp
g++ -std=c++11 test.cpp

参考文献

1、编译和链接的过程_douguailove的博客-CSDN博客_编译 链接

2、基于VSCode和CMake实现C/C++开发 | Linux篇_哔哩哔哩_bilibili

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值