学习分享 · Linux 开发环境 · C++ 后端

WSL2 + VSCode + C++ 后端开发环境搭建

这是一篇面向初学者的科普型学习笔记:先解释命令、路径和软件包是什么,再一步步搭建 WSL2、VSCode、C++、CMake、Redis、MySQL、Protobuf 等后端开发基础环境。

0. 先看懂本文会用到什么

一句话目标:在 Windows 上用 WSL2 跑一个接近真实 Linux 服务器的 Ubuntu 开发环境,然后用 VSCode 写 C++ 后端项目。

适用方向:C++ HTTP 服务、IM 长连接、MySQL、Redis、Protobuf、Drogon 等 Linux 后端项目。

WSL2 Windows 里的 Linux 环境,适合写服务端代码。
Ubuntu 常见 Linux 发行版,服务器和开发环境都很常用。
VSCode Remote - WSL 让 VSCode 直接进入 Ubuntu 文件系统和终端。

路径概念先搞懂

写法含义例子
~当前 Linux 用户的家目录/home/wqf
/home/wqf/workspace推荐的项目工作目录,位于 Linux 文件系统C++ 编译更快、权限更简单
/mnt/c/...WSL 里访问 Windows C 盘的路径可以读写 Windows 文件,但不推荐放 C++ 项目
.当前目录code . 表示用 VSCode 打开当前目录
..上一级目录cmake .. 表示从 build 目录回看项目根目录
核心原则:项目代码尽量放在 Linux 文件系统里,例如 /home/wqf/workspace,不要放在 /mnt/c/Users/...。WSL2 访问 Windows 文件系统会更慢,C++ 编译时尤其明显。

1. Linux 命令速查:先科普,再操作

下面这些命令会贯穿全文。初学者不要急着背,先知道它们“负责什么”。

命令作用本文中的用法
cd切换目录cd ~/workspace
pwd显示当前所在目录确认自己是否在 /home/wqf
mkdir创建文件夹mkdir echo-server
mkdir -p递归创建文件夹,已存在也不报错mkdir -p src include docs scripts
touch创建空文件touch main.cpp
mv移动或重命名文件mv main.cpp src/main.cpp
rm -rf强制递归删除目录rm -rf build,慎用
sudo以 Linux 管理员权限执行命令sudo apt update
apt clean清理 apt 下载缓存修复软件源缓存异常
apt update更新软件包索引安装软件前通常先执行
apt upgrade -y升级已安装软件包,-y 自动确认保持系统依赖较新
apt install -y安装软件包,-y 自动确认安装 g++、cmake、git 等工具
sed -i直接修改文件内容替换 apt 软件源地址
g++C++ 编译器g++ main.cpp -o app
./app运行当前目录下的可执行文件运行编译出的 C++ 程序
cmake ..生成项目构建配置build 目录里执行
make按照构建配置编译项目生成 echo-server 可执行文件
code .用 VSCode 打开当前目录从 WSL 中打开项目
service启动或管理系统服务sudo service redis-server start
redis-cli ping测试 Redis 是否可用返回 PONG 表示正常
protoc --version查看 Protobuf 编译器版本验证 Protobuf 安装成功

常用 WSL 命令也要认识

命令作用
wsl -l -v查看已安装的 Linux 发行版及 WSL 版本。
wsl -d Ubuntu-22.04启动指定 Ubuntu 发行版。
wsl --shutdown关闭所有正在运行的 WSL 实例。
wsl --set-version Ubuntu-22.04 2把指定发行版转换为 WSL2。

2. 软件包与工具科普

这一节先把后面会安装的软件包讲清楚。知道它们是什么,排错时才不会慌。

基础 C++ 开发工具

软件包/工具它是什么为什么需要
build-essentialUbuntu 的 C/C++ 基础编译工具集合会安装 gcc、g++、make 等常用工具。
gccC 编译器编译 C 语言代码,也常作为基础工具链的一部分。
g++C++ 编译器编译 .cpp 文件,生成可执行程序。
gdbC/C++ 调试器用于定位崩溃、断点调试、查看变量。
cmake现代 C++ 构建系统生成器管理多文件、多依赖项目,避免长期手写 g++ 命令。
make构建执行工具读取构建规则并执行编译。
git版本控制工具记录代码历史、回滚修改、多人协作。
curl / wget命令行下载与请求工具下载依赖、测试 HTTP 接口。
zip / unzip压缩包处理工具打包、解压项目或依赖文件。
pkg-config库信息查询工具帮助 CMake 或编译器找到系统库的位置和参数。

后端项目依赖

软件包/工具它是什么后端里用来做什么
protobuf-compilerProtobuf 编译器,命令是 protoc.proto 协议文件生成 C++ 代码。
libprotobuf-devProtobuf C++ 开发库让 C++ 项目能链接并使用 Protobuf。
mysql-serverMySQL 数据库服务端保存用户、帖子、好友、消息等数据。
libmysqlclient-devMySQL C/C++ 开发库让 C++ 程序能连接 MySQL。
redis-serverRedis 内存数据库服务端缓存、会话、在线状态、消息队列辅助等。
redis-cliRedis 命令行客户端ping 快速检查 Redis 服务是否正常。
DrogonC++ HTTP/Web 框架后续用来写 /ping、注册登录、Feed 接口等。
学习建议:不要一开始就把所有依赖都装上并同时排错。先跑通 WSL2 + VSCode + g++ + CMake,再逐步接入 Redis、MySQL、Protobuf 和 Drogon。

3. 为什么选择 WSL2,而不是虚拟机或纯 Windows

  • 目标是开发 Linux C++ 服务端,而不是 Windows 桌面程序;最终部署环境大概率也是 Ubuntu/Linux。
  • WSL2 不需要 ISO 镜像、不需要 VirtualBox/VMware,也不需要完整 Linux 桌面,更适合轻量开发。
  • 传统虚拟机更像一台完整电脑,但网络、共享目录、性能和配置复杂度会更高。
  • Visual Studio 更偏 Windows C++、Win32、.NET、MFC;本项目需要 gcc、cmake、epoll、Redis、MySQL、Protobuf 等 Linux 生态,更推荐 VSCode + Remote WSL。

4. 进入正确工作目录

如果终端路径显示在 /mnt/c/WINDOWS/system32,说明你还在 Windows 文件系统里,不适合在这里写 Linux C++ 项目。

cd ~
pwd

正确结果应该类似:

/home/wqf

创建长期工作目录:

mkdir -p ~/workspace
cd ~/workspace
为什么这样做:~/workspace 位于 Linux 文件系统,编译更快、权限更简单、路径更稳定,适合长期存放 C++ 工程。

5. 修复 apt 404 问题并安装基础工具

5.1 处理 apt 404

如果遇到 404 Not Found,通常不是系统坏了,而是 apt 软件源索引过期。先清理并更新索引:

sudo apt clean
sudo apt update
sudo apt upgrade -y --fix-missing

如果仍然报 404,可以换成国内镜像源,例如阿里云镜像:

sudo sed -i 's|http://security.ubuntu.com/ubuntu|http://mirrors.aliyun.com/ubuntu|g' /etc/apt/sources.list
sudo sed -i 's|http://archive.ubuntu.com/ubuntu|http://mirrors.aliyun.com/ubuntu|g' /etc/apt/sources.list
sudo apt clean
sudo apt update
sudo apt upgrade -y

5.2 安装基础 C++ 开发工具

sudo apt install -y \
  build-essential \
  gdb \
  cmake \
  git \
  curl \
  wget \
  zip \
  unzip \
  pkg-config

5.3 验证基础工具

g++ --version
cmake --version
git --version

如果这些命令都能输出版本号,说明最基础的开发环境已经可用。

6. 安装 VSCode 插件并连接 WSL

6.1 安装插件

  • Remote - WSL:让 VSCode 直接连接 WSL Ubuntu。
  • C/C++:提供 C++ 语法高亮、补全、跳转和调试能力。
  • CMake Tools:后续用 CMake 构建项目时更方便。
  • CMake:提供 CMakeLists.txt 语法支持。

6.2 从 WSL 中打开 VSCode

cd ~/workspace
code .

第一次执行会安装 VSCode Server。成功后,VSCode 左下角应显示 WSL: Ubuntu-22.04

6.3 打开终端

在 VSCode 顶部菜单点击“终端 → 新建终端”,或使用快捷键 Ctrl + `。终端里应看到类似:

wqf@DESKTOP:~/workspace$

这说明当前 VSCode 终端已经进入 Linux 环境。

7. 创建并运行第一个 C++ 程序

7.1 创建项目目录和文件

cd ~/workspace
mkdir echo-server
cd echo-server
touch main.cpp

mkdir 创建项目目录,touch 创建源文件。项目名 echo-server 可以对应后续的 Echo 信息流或 IM 后端项目。

7.2 写入 main.cpp

#include <iostream>

int main() {
  std::cout << "Echo Server started." << std::endl;
  return 0;
}

7.3 手动编译运行

g++ main.cpp -o app
./app

看到下面输出,就说明编译器、终端、文件系统和 VSCode 都能正常工作:

Echo Server started.

8. 引入 CMake:从玩具程序走向工程项目

真实 C++ 项目通常有多个源文件、头文件和第三方库。如果一直手写 g++ 命令,项目稍大就会失控,所以要尽早引入 CMake。

8.1 创建 CMakeLists.txt

touch CMakeLists.txt

写入以下内容:

cmake_minimum_required(VERSION 3.16)
project(echo-server)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(echo-server main.cpp)

8.2 用 CMake 构建

mkdir build
cd build
cmake ..
make
./echo-server

build 目录用于存放中间产物,保持项目根目录干净;cmake .. 生成构建配置,make 执行编译。

9. 整理项目结构

不要把所有代码都堆在 main.cpp。中型后端系统从一开始就应该建立清晰目录。

cd ~/workspace/echo-server
mkdir -p src include docs scripts
mv main.cpp src/main.cpp
目录用途
src/source 缩写,存放 .cpp 源代码文件。
include/存放 .h / .hpp 头文件。
docs/存放项目文档、接口说明、设计记录。
scripts/存放脚本工具,例如启动、清理、部署脚本。

推荐初始结构:

echo-server/
├── CMakeLists.txt
├── src/
│   └── main.cpp
├── include/
├── docs/
└── scripts/

修改 CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(echo-server)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(echo-server
  src/main.cpp
)

target_include_directories(echo-server PRIVATE include)

重新构建

rm -rf build
mkdir build
cd build
cmake ..
make
./echo-server

10. 安装后端项目所需依赖

基础环境跑通后,再安装 Protobuf、MySQL、Redis。不要一开始全堆上去,否则出错时很难定位。

sudo apt install -y \
  protobuf-compiler \
  libprotobuf-dev \
  mysql-server \
  redis-server \
  libmysqlclient-dev

验证 Protobuf

protoc --version

验证 Redis

sudo service redis-server start
redis-cli ping

如果返回:

PONG

说明 Redis 正常。

MySQL 建议:当前阶段先安装即可,数据库表设计可以等注册登录、帖子、好友、消息等业务模块开始时再做,不要过早设计十几张表。

11. 为什么现在先不做 IM,以及后续路线

IM 长连接涉及 TCP、心跳、断线、连接映射、离线消息、ACK、Protobuf 编解码和并发安全,是项目中最复杂的模块之一。正确顺序是:先 HTTP,再数据库,再业务闭环,最后 TCP IM。

顺序任务原因
1确认 WSL2 + VSCode + gcc + cmake 可用保证开发环境稳定,避免后续问题混在一起。
2搭建 CMake 项目骨架让项目结构可维护,也方便理解后续代码修改。
3安装并测试 Drogon HTTP 服务先做最简单的 /ping 接口,证明 HTTP 服务可运行。
4实现用户注册/登录这是帖子、好友、聊天的身份基础。
5接入 MySQL把用户、帖子、好友、消息持久化。
6实现发帖和 Feed 拉取先跑通 Echo 信息流主链路。
7实现好友申请/通过Feed 和 IM 都依赖关系链。
8最后实现 TCP IM在业务基础稳定后,再做长连接、心跳和离线消息。

12. 当前阶段的验收标准

  • VSCode 左下角显示 WSL: Ubuntu-22.04
  • 终端位于 /home/wqf/workspace 或其子目录,而不是 /mnt/c/...
  • g++ --versioncmake --versiongit --version 都能输出版本。
  • main.cpp 可以通过 g++ 编译并运行。
  • CMakeLists.txt 可以成功生成 echo-server 可执行文件。
  • redis-cli ping 可以返回 PONG
学习总结:本页不是单纯罗列命令,而是按照“先理解工具 → 再搭建环境 → 最后验证结果”的顺序组织。只要每个验收项都通过,就可以进入 Drogon HTTP 服务和业务接口开发阶段。
← 返回我的主页