3.1. C++开发环境搭建

C++ 是一种被广泛使用的计算机程序设计语言,是20世纪80年代由 Bjarne Stroustrup 在贝尔实验室工作期间发明并实现。 它是一种通用程序设计语言,支持多重编程模式,例如过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计和设计模式等。

C++JTC1/SC22/WG21 的ISO工作组标准化。 到目前为止,已经发布了 C++ 标准的五个修订版,并且目前正在研究下一个修订版 C++ 20

Year C++ Standard Informal name
1998 ISO/IEC 14882:1998 C++98
2003 ISO/IEC 14882:2003 C++03
2011 ISO/IEC 14882:2011 C++11, C++0x
2014 ISO/IEC 14882:2014 C++14, C++1y
2017 ISO/IEC 14882:2017 C++17, C++1z
2020 to be determined C++20, C++2a

3.1.1. 安装CMake

Linux 上开发 C++ 基本都是 CMake 工程。因此要安装相应的工具链。

安装Ubuntu官方源版本

# 不同 Ubuntu 系统官方软件源的CMake版本不一样
# Ubuntu 18.04  3.10
# Ubuntu 20.04  3.16
sudo apt install --no-install-recommends cmake make

安装CMake官方源版本。如果想要安装最新的 CMake,需要添加 CMake 官方的源后再安装:

wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null  # 获取 gpg密钥
sudo apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main"   # 添加软件源
sudo apt update   # 更新软件源
sudo apt install --no-install-recommends cmake make

CMake 官方镜像源在国外,建议使用代理加速 apt 下载。

3.1.2. 安装编译器

目前跨平台的主流编译器工具链有两套 GNULLVM, 对应的 C/C++ 编译器分别为 GCCClang, 对应的代码 Debug 工具分别为 GDBLLDB

3.1.2.1. GCC和Clang的简单对比

GCC 的优势:

  1. ClangLLVM 相比,GCC 支持更多的传统语言,例如 AdaFortranGo
  2. GCC 是编译 Linux 内核的唯一选择,也是绝大部分开源软件默认编译器。

Clang 的优势:

  1. 新兴语言偏好使用 LLVM 框架,例如 SwiftRustJuliaRuby
  2. ClangGCC 更严格地遵守 CC++ 标准。
  3. Clang 提供了其他有用的工具,例如,用于代码格式化的 clang-format,静态语法分析的 clang-tidyCLion 和部分 IDE 帮你 修改错误代码 以及 代码更改建议 的功能)以及编辑器插件 Clangd
  4. Clang 提供更准确和友好的诊断信息,并突出显示错误消息,错误行,错误行提示和修改建议。当然该功能在 GCC8 里也变得较为成熟了。
  5. Clang 使用 BSD 协议。相比于 GCC GPL 协议, BSD 协议给予了使用者更多的自由。
  6. Clang 开源代码风格比较好,读懂代码比较容易。

基于 Clang 的最后两点优势,很多新编译器是基于或借鉴 Clang 开发的。 两者对于一般用户使用起来没啥区别,对于开发编译器或者对代码底层很在意的人,两者有较大区别Linux 环境下一般安装 GNU 工具链。

3.1.2.2. 安装GCC

# 不同Ubuntu系统官方源默认的GNU版本不一样
# Ubuntu 18.04  GCC 7.4     GDB 8.1
# Ubuntu 20.04  GCC 9.3     GDB 9.1
sudo apt install --no-install-recommends gcc g++ gdb

# gcc g++ 也可以安装别的版本,安装非默认的版本 是不会在 /usr/bin 下创建 gcc g++ 对应的链接文件的,需要自己创建
sudo apt install --no-install-recommends gcc-8 g++-8 gdb

3.1.2.3. 安装Clang

# 不同Ubuntu系统官方源默认的LLVM版本不一样
# Ubuntu 18.04  6.0
# Ubuntu 20.04  10.0
sudo apt install --no-install-recommends clang lldb llvm-dev

# 也可以安装别的版本,安装非默认的版本 是不会在 /usr/bin 下创建 clang lldb llvm 对应的链接文件的,需要自己创建
sudo apt install --no-install-recommends clang-10 lldb-10 llvm-10

LLVM 官网上提供了官方的预编译好的文件,可以下载下来直接解压就可以用。

3.1.3. VsCode开发C++

3.1.3.1. 基本配置

VsCode 通过安装插件可以支持 C++ 开发,至少需要安装以下3个插件:

  • C/C++:提供C/C++ 智能提示, 代码调试等功能
  • CMake:提供CMake语言支持
  • CMake Tools:提供CMake工程创建、编译,智能提示等功能

3.1.3.2. 创建CMake工程

CMake Tools 插件可以创建 CMake 工程。

1. 创建基本工程:打开 VsCode,按 Ctrl+Shift+P 打开命令栏,输入 CMake: Quick Start 命令后回车,然后输入想要创建的工程的名字,最后选择工程类型为 ExecutableVsCode 会创建一个源文件 main.cppCMakeLists.txt

../_images/c++-1.png

2. 选择一个 kit:按 Ctrl+Shift+P 打开命令栏后输入 CMake: Select a Kit 命令后选择编译器, 或者点击底部状态栏对应的图标后选择编译器。

../_images/c++-2.png

3. 选择编译类型:按 Ctrl+Shift+P 打开命令栏后输入 CMake: Select Variant 命令后选择编译类型, 或者点击底部状态栏对应的图标后选择编译类型。默认为 Debug

../_images/c++-3.png

4. CMake: Configure: 按 Ctrl+Shift+P 打开命令栏后输入 CMake: Configure 命令, 或者点击左侧工具栏的 CMake 工具,点击 Configure All ProjectsVsCode 会自动在目录下生成 build 目录,并执行 cmake 命令:

../_images/c++-4.png

5. 配置 IntelliSenseCMake: Configure 之后右下角会弹出通知,是否需要由 CMake 为工程提供 Intellisense,选择 允许 后会生成一个隐藏文件夹 .vscode 和相关的 settings.json 文件。 如果提示缩回去了,可以点击右下角的铃铛图标后再一次显示。

VsCode 会根据 CMake Configure 提供智能提示:

../_images/c++-5.png

6. 编译工程:按 Ctrl+Shift+P 打开命令栏后输入 CMake: Build 命令, 或者点击底部状态栏对应的图标后执行编译:

../_images/c++-6.png

3.1.3.3. Debug C++代码

  1. 在 工程目录的隐藏文件 .vscode 中创建文件 launch.json
../_images/c++-7.png
  1. launch.json 中写入调试相关配置:
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "debug",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/build/example",
      "args": [],
      "stopAtEntry": true,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": true,
      "MIMode": "gdb",
      "setupCommands": [
        {
          "description": "为 gdb 启用整齐打印",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ]
    }
  ]
}

以下几项需要更据自己的要求进行修改:

  • name: debug 工程的名字,一般不用改。
  • program :被 degbug的程序的路径,${workspaceFolder} 是 CMake工程的根目录。
  • args:程序命令行参数,如果有的话,例子: "args": ["${workspaceFolder}/1.yaml", "${workspaceFolder}/2.txt"]
  • stopAtEntry:是否在进入 main 函数后默认有断点。
  • externalConsole : debug 时是否打开一个新的终端。
  1. 配置文件写好后,设置好断点,按 F5,就可以进入调试了:
../_images/c++-8.png

3.1.4. C++代码风格

参考 Google C++ 代码风格