# C/C++编程环境搭建

## 基础环境

### 编译器

你首先需要安装一些基础软件包，这些软件包是编译C/C++程序所必须的。

```Shell
sudo apt install build-essential
```

build-esential是一个元包，它包含了编译C/C++程序所必须的软件包。包括了gcc、g++、make、libc6-dev|libc-dev.

当然你也可以安装llvm，它也是一个C/C++编译器，它的优势是可以编译C/C++以外的语言，比如Rust、Go、Swift等。

```Shell
sudo apt install llvm # llvm后端编译器
sudo apt install clang # clang前端编译器
```

### 调试工具

调试工具是编程的必备工具，它可以帮助我们快速定位程序的错误，提高程序的运行效率。

```Shell
sudo apt install gdb  # gdb调试器
sudo apt install valgrind  # valgrind内存检查工具
```

### 静态分析工具

静态分析工具可以帮助我们检查程序的错误，比如内存泄漏、空指针访问等。

```Shell
sudo apt install cppcheck  # cppcheck静态分析工具
sudo apt install clang-tidy  # clang-tidy静态分析工具
```

### 代码格式化工具

代码格式化工具可以帮助我们格式化代码，使得代码风格统一，提高代码的可读性。

```Shell
sudo apt install clang-format  # clang-format代码格式化工具
```

clang-format可以使用配置文件进行配置，deepin社区提供一份符合deepin代码风格的配置文件，你可以在[这里](https://github.com/linuxdeepin/deepin-styleguide)
找到，不过建议不要依靠这个配置文件，因为这个配置文件是根据deepin的代码风格来的，如果你的代码风格不是deepin的，那么这个配置文件就不适合你。

拥有一个好的代码风格是非常重要的，它可以提高代码可读性，可维护性，可扩展性，可复用性，可测试性等等，所以你应该自己制定一套代码风格，然后使用clang-format来格式化你的代码。

不过你还是不要太过于依赖工具，因为工具是人类的延伸，而不是人类的替代。当clang-format不能满足你的需求时，你应该自己去修改代码。

`.clang-format`配置文件详见[官方文档](https://clang.llvm.org/docs/ClangFormatStyleOptions.html)

### 代码检查工具

代码检查工具可以帮助我们检查代码的错误，比如变量未使用、变量未初始化等。

```Shell
sudo apt install clang-check  # clang-check代码检查工具
```

### 代码覆盖率工具

代码覆盖率工具可以帮助我们检查代码的覆盖率，比如哪些代码没有被测试到。

```Shell
sudo apt install lcov  # lcov代码覆盖率工具
```

### 代码压缩工具

代码压缩工具可以帮助我们压缩代码，使得代码占用的空间更小。

```Shell
sudo apt install upx  # upx代码压缩工具
```

### 构建工具

构建工具可以帮助我们构建项目，比如编译、链接、安装等。

```Shell
sudo apt install cmake  # cmake构建工具
sudo apt install meson  # meson构建工具
sudo apt install ninja-build  # ninja构建工具
```

## 文本编辑器

其实当上方的软件包都安装了之后，你就可以开始编写C/C++程序了，但是你还需要一个文本编辑器，这个文本编辑器可以是任意的，比如gedit、vim、emacs等。
这里作为推荐，我推荐几款文本编辑器

### vim

vim是一款非常强大的文本编辑器，它的功能非常强大，但是它的学习曲线也非常陡峭，所以如果你是初学者，我不建议你使用vim。

```Shell
sudo apt install vim
```

### emacs

emacs是一款非常强大的文本编辑器，它的功能非常强大，但是它的学习曲线也非常陡峭，所以如果你是初学者，我不建议你使用emacs。

```Shell
sudo apt install emacs
```

### vscode

vscode是微软出品的一款文本编辑器，它的功能非常强大，而且它的学习曲线也不是很陡峭，所以如果你是初学者，我建议你使用vscode。

根据vscode的开源协议，deepin不能在源中提供vscode的安装包，所以你需要去官网下载安装包，然后手动安装。
或者（推荐）在应用商店中搜索vscode，然后安装。（这种方式会添加vscode官方的软件源，所以以后更新vscode会方便很多）

### notepad--

notepad--是一个开源跨平台的文本编辑器，其gitee项目地址为: [https://gitee.com/cxasm/notepad--](https://gitee.com/cxasm/notepad--)

## IDE

IDE是一款集成开发环境，它可以帮助我们快速开发程序，比如编译、调试、运行、格式化、检查、压缩等。

### Eclipse CDT

Eclipse CDT 是一个开源的 C/C++ 开发工具，可以在 Linux、Windows 和 Mac 上使用。它是一个功能强大的 IDE，可以提供代码补全、调试、版本控制、构建、重构等功能。Eclipse CDT 的插件生态系统也非常丰富。

### Code::Blocks

Code::Blocks 是一个免费的跨平台 C++ IDE，适用于 Linux、Windows 和 Mac。它提供了许多功能，包括代码补全、调试、构建、版本控制等。Code::Blocks 的用户界面简单易用，适合初学者和中级开发者。

### Qt Creator

Qt Creator 是一个基于 Qt 库的跨平台 IDE，适用于 C++ 和 QML 开发。它提供了集成的调试器和代码编辑器，并支持代码补全、代码模板、自动重构等功能。Qt Creator 还可以用于开发 GUI 应用程序。

### KDevelop

KDevelop 是一个开源的 C++ IDE，是 KDE 开发环境的一部分，适用于 Linux 和其他 UNIX 操作系统。它提供了代码补全、调试、版本控制、语法检查等功能，还可以集成其他开发工具和外部应用程序。

### NetBeans

NetBeans 是一个免费的跨平台 IDE，适用于 C++、Java 和其他编程语言。它提供了代码补全、调试、版本控制、GUI 开发工具等功能，可以帮助开发者快速开发应用程序

### CLion

CLion 是一个基于 IntelliJ IDEA 的 C/C++ IDE，适用于 Linux、Windows 和 Mac。它提供了代码补全、调试、版本控制、构建、重构等功能，还可以集成其他开发工具和外部应用程序。 CLion是一个收费软件，如果你是学生的话，可以去官网申请学生许可证。

## 11.1.4资源指南

### 书籍

#### C++ Primer Plus

这是一本非常适合初学者的 C++ 教材，详细讲解了 C++ 的基本语法、数据类型、函数、类和对象等概念，还有大量的练习题和案例，可以帮助读者更好地理解和掌握 C++。

#### Effective C++系列

这是一系列由著名 C++ 专家 Scott Meyers 写的书籍，详细介绍了 C++ 的一些高级特性和最佳实践，可以帮助读者写出高效、健壮、易于维护的 C++ 代码。

#### C++ Primer

这是一本非常流行的 C++ 教材，详细介绍了 C++ 的语言特性、标准库和模板等内容，适合有一定编程基础的读者学习。

#### The C++ Programming Language

这是 C++ 之父 Bjarne Stroustrup 写的一本权威教材，详细介绍了 C++ 的语言设计和应用，可以帮助读者深入理解 C++ 的特性和设计思想。

### 网站

#### C++ Reference

这是一个在线的 C++ 参考文档，可以帮助读者查找 C++ 的语法、标准库和特性等内容，非常方便。

#### C++知识视频

在国内的视频网站上有许多大学的 C++ 课程，可以帮助读者学习 C++。


## C++/C 的UI库

### Qt

Qt 是一个跨平台的 C++ 库，可以用于开发桌面应用程序、移动应用程序和嵌入式系统。Qt 提供了丰富的 UI 组件，可以帮助开发者快速开发 GUI 应用程序。
详见：[Qt](https://www.qt.io/)

#### DTK

DTK 是一个基于 Qt 的跨平台 C++ 库，提供了丰富的 UI 组件，可以帮助开发者快速开发 GUI 应用程序。DTK 的目标是提供一个简单、易用、高效的 C++ 库，可以帮助开发者快速开发 GUI 应用程序。

详见：[11.5.DTK编程环境搭建](./11.5.DTK%E7%BC%96%E7%A8%8B%E7%8E%AF%E5%A2%83%E5%BC%80%E5%8F%91.md)

### EasyX

EasyX，全名：“EasyX Graphics Library for C++”。由于其采用静态编译，并不依赖任何 dll，超低的学习成本，深受许多开发者喜欢

sdeepin下环境搭建：[EasyX在deepin下的环境搭建](https://wiki.deepin.org/zh/%E5%A6%82%E4%BD%95%E5%9C%A8deepin%E4%B8%8B%E4%BD%BF%E7%94%A8EasyX%E5%BA%93)
