C++从零开始实现LSM-Tree-KV存储-00-环境配置

这一小节本来算是一个补充吧, 正好之前实现Redis的部分有些bug, 修正后继续实现Redis, 这一节先简单介绍下我自己的开发环境

1 OS和编译器环境

本项目目前最高使用的C++标准是C++20, 所以需要使用g++或者clang++进行编译, 因此只要是支持C++20的编译器都可以. 我这里使用的操作系统是kali linux, 其和Ubuntu一样, 都是基于Debian, 且都使用apt作为系统包管理工具, 所以你使用Ubuntu或者Debian执行我之后的安装指令肯定也没有什么问题。

我使用WSL2kali linux作为开发环境, WSL2相关内容可以参考WSL入门到入土

1.1 编译器安装

1
2
sudo apt install -y gcc
sudo apt install -y g++

这里我的编译器版本是gcc-12/g++-12

1.2 语言服务器

这里我们使用clangd作为语言服务器, clangd是一个C/C++语言服务器, 其可以提供代码补全、代码跳转、代码高亮等功能。

1
sudo apt install -y clangd

2 项目管理工具

2.1 Xmake

2.1.1 安装

本项目使用Xmake作为项目管理工具, Xmake是一个C/C++项目管理工具, 其可以看做Make+CMake+vcpkg的集合, 包括构建、依赖管理和项目运行等功能。

安装Xmake

1
curl -fsSL https://xmake.io/shget.text | bash

Xmake官网参考: https://xmake.io/#/getting_started

2.1.2 Xmake语法简介

Xmake使用Lua作为脚本语言,其语法简单易学,支持C/C++的依赖管理、构建、运行等功能。以下是一些基本的内置函数:

  • 项目配置:通过 add_rules 添加规则,如添加 C++11 支持。
  • 目标定义:使用 target 定义构建目标,包括可执行文件或库。
  • 源文件指定:通过 set_sources 指定源代码文件。
  • 依赖管理:定义项目时使用add_requires添加依赖, 定义目标时用 add_deps 声明本地依赖的目标, 使用 add_packages 添加第三方包依赖。
  • 宏定义与包含路径:分别通过 add_definesadd_includedirs 设置。

这里说起来比较抽象, 直接看一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- 定义项目
set_project("toni-lsm")
set_version("0.0.1")
set_languages("c++20")

add_rules("mode.debug", "mode.release")
add_requires("gtest") -- 添加gtest依赖
add_requires("muduo") -- 添加Muduo库

target("utils")
set_kind("static") -- 生成静态库
add_files("src/utils/*.cpp") -- 指定源代码文件
add_includedirs("include", {public = true})

target("example")
set_kind("binary") -- 生成可执行文件
add_files("example/main.cpp") -- 指定源代码文件
add_deps("utils") -- 声明依赖目标
add_includedirs("include", {public = true})
set_targetdir("$(buildir)/bin")
add_packages("gtest") -- 添加gtest包

常用的

以上是 Xmake 的基本语法概览,更多细节可以参考官方文档: https://xmake.io/#/getting_started

2.2 vcpkg安装

vcpkg是一个跨平台依赖管理工具, 其可以自动下载、编译和安装C/C++依赖库。虽然Xmake自带一个依赖管理库, 但上面的库还是比较少, 作为补充, 我们可以再安装vcpkg, 这使得我们可以使用vcpkg来安装更多Xmake没有的依赖库。

vcpkg这里不过多介绍, 可以直接看我另一篇文章: https://zhuanlan.zhihu.com/p/849150169

3 VSCode配置

3.1 代码智能提示和跳转

这里使用clangd作为语言服务器, 我们之前已经安装了clangd, 现在只需要在VSCode中安装clangd插件即可:

clangd-isntall

3.2 集成Xmake

VScode中支持Xmake项目管理工具, 我们可以安装Xmake插件, 使得在VSCode中可以更方便的使用Xmake项目管理工具:

Xmake-VSC

这里有一点需要说明, 如果你安装了Xmake插件, 但是在调试时卡死不懂, 建议禁用Code RunnerC/C++ Runner两个插件, 如果还行不将CMake插件也一起禁用了:

ban-extensions

如果你的Xmake在调试时进入的是gdb的页面, 请在设置中将Debug Config Type设置为lldb:

xmake-lldb

当然你需要先安装CodeLLdb插件:

CodeLLdb

3.3 代码高亮

如果你经常用C++开发, 那么你可能经常会遇到第三方包导致代码高亮跳转失效的问题:

clangd-error

这是因为语言服务器找不到第三方包的头文件, 由于我们使用的语言服务器是clangd, 我们可以在项目根目录中添加.clangd配置文件, 让clangd知道我们的第三方包头文件的位置:

1
2
3
4
5
CompileFlags:            # 编译标志部分
Add:
- "-std=c++20" # 添加 C++17 支持
- "-isystem/home/toni/proj/vcpkg/installed/x64-linux/include" # 包含头文件, 绝对路径
- "-isystem/home/toni/.xmake/packages/m/muduo/2022.11.01/e9382a25649e4e43bf04f01f925d9c2f/include" # 包含头文件, 绝对路径

这样一来之前的告警就不复存在了

3.4 其他实用插件

3.4.1 Better Comments && TodoTree

Better Comments是一个VSCode插件, 它可以提供代码注释高亮和语法高亮功能, 使得代码更加易读。比如像TODO, !这样的符号:

Better-Comments

当我们实现一个功能但其后续需要更新时, 我们可以在代码中添加TODO注释, 以便后续更新时更醒目。

TodoTree则会在侧边栏展开我们标记了TODO的注释的位置

TODO

3.4.2 AI插件

如果你有钱, 直接用Cusor, Windsurf, 他们的体验更好

如果和我一样不够钱, 那么你可以使用通义灵码, Cline或者GitHub Copilot:

lingma
Cline
Copilot