参考课程: 基于VSCode和CMake实现C/C++开发 | Linux篇_哔哩哔哩_bilibili
vim:是所有Unix和Linux系统下标准的文件编辑器
gedit:Linux系统下的纯文本编辑器,可视化后类似于Windows系统中的记事本
touch linux2.txt
sudo gedit linux2.txt
nano:使用起来比vim简单的文本编辑器,可直接编辑,且使用该命令打开文件后,文件的下端有操作提示符,使用起来非常简单
nano linux2.txt
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).
预处理->编译->汇编->链接 (生成可执行程序)
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 系统中,绿色代表可执行文件
-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