Linux系统学习笔记二

参考课程: 基于VSCode和CMake实现C/C++开发 | Linux篇_哔哩哔哩_bilibili

1、文件编辑器

vim:是所有Unix和Linux系统下标准的文件编辑器

gedit:Linux系统下的纯文本编辑器,可视化后类似于Windows系统中的记事本

touch linux2.txt
sudo gedit linux2.txt

Linux系统学习笔记二_第1张图片

nano:使用起来比vim简单的文本编辑器,可直接编辑,且使用该命令打开文件后,文件的下端有操作提示符,使用起来非常简单

nano linux2.txt

Linux系统学习笔记二_第2张图片

2、编译器和调试器的安装

gcc和g++分别是GNU的c和c++的编译器,gdb是Unix系统的调试工具

sudo apt-get update
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install build-essential gdb  # 该命令可同时安装gcc g++及gdb

# 查看安装版本
gcc --version
# 输出
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

g++ --version
# 输出
g++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

gdb --version
# 输出
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

CMake安装可以参考我之前的博客:Ubuntu安装Cmake记录_Cassiel_cx的博客-CSDN博客

或直接安装

sudo apt-get install cmake
cmake --version
# 输出
cmake version 3.23.3

CMake suite maintained and supported by Kitware (kitware.com/cmake).

3、编译过程

预处理->编译->汇编->链接 (生成可执行程序)

vscode通过调用gcc和g++编译器来编译c/c++程序

mkdir testcpp
touch test.cpp
sudo gedit test.cpp

# test.cpp
# include 
using namespace std;

int main()
{
cout << "Hello World" << endl;
return 0;
}

预处理 (输出 .i 文件)

将所有的#define删除,并且展开所有的宏定义;处理所有的条件预编译指令,比如#if、#ifdef、#elif、#else、#endif等;处理#include预编译指令,将被包含的文件直接插入到预编译指令的位置;删除所有的注释;添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号;保留所有的#pragma编译器指令,因为编译器需要使用它们。

# -E表示编译器只预处理输入文件
g++ -E test.cpp -o test.i

编译 (输出 .s 文件)

扫描->语法分析->语义分析->源代码优化->代码生成->目标代码优化 

# -S表示g++为代码产生汇编语言后停止编译
g++ -S test.i -o test.s

汇编 (输出 .o 文件)

将 .s 文件翻译成机器语言指令,把这些指令打包成可重定位目标程序格式

# -c表示g++仅把代码编译为机器语言的目标代码
g++ -c test.s -o test.o

链接 (输出二进制文件)

生成可执行目标文件

g++ test.o -o test

以上四步汇总

g++ test.cpp -o test

 在 Linux 系统中,绿色代表可执行文件

4、g++ 重要编译参数

-O[num]:g++对代码进行优化

-O0 表示不做优化
-O1 表示默认优化
-O2 表示除了完成-O1的优化以外,还进行一些额外的调整工作
-O3 表示包括循环展开和其他一些与处理特性相关的优化工作

-l:用于指定程序链接的库,后面紧跟着的就是库名。注意,需在/lib,/usr/lib和/usr/local/lib里面的库才能被-l链接

-L: 指定库文件路径,后面紧跟着库文件所在的目录名

-I:指定头文件搜索目录

-Wall:打印警告信息

-w:关闭警告信息

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

-o:指定输出文件名,若不指定,则默认生成a.out

-D:定义宏,如:-DDEBUG

# include 
# include 
using namespace std;

int main()
{
# ifdef DEBUG
        printf("Debug\n");
# endif
}
g++ -DDEBUG test.cpp -o test
./test

# 输出
Debug

man:查看指令使用手册,如:man gcc

你可能感兴趣的:(Linux系统,linux,学习,unix)