Zed Editor C++开发环境配置(基于 CMAKE 与 MinGW-w64 )

一、 工具链安装

  • 安装 Zed Editor

  • 安装 CMake

  • 安装 MinGW-w64

  • 配置以上工具链到系统Path变量

    • 开始菜单搜索编辑系统环境变量
    • 点击右下角环境变量
    • 双击下方系统变量栏中的Path
    • 通过点击新建再点击浏览的方式即可添加路径到Path变量
    • 将上面安装的CMake和MinGW里的bin文件夹逐一添加即可
  • 测试环境

    • 在桌面右键,选择在终端中打开
    • 分别输入以下两条指令测试是否能正常显示版本信息
    shell 复制代码
    g++ -v            //测试g++是否可用,可用的话输出版本信息
    
    cmake -version     //测试cmake是否可用,可用的话输出版本信息

如果正常的话显示效果应该与下图类似

二、项目结构创建

2.1 基本项目创建(以 hello world 为示例)

  • 创建一个目录作为Zed的工作目录( 例如 workspace 文件夹),用 Zed 编辑器打开。
  • 新建一个目录用于存放项目(例如 helloworld )
  • 新建 main.cpp 文件写入测试代码
cpp 复制代码
#include <iostream>

 int main() {
    std::cout << "hello world!" << std::endl;
    return 0;
}

正常情况下下方会自动安装 clang 语言支持服务,但此时会有找不到标准库与项目头文件等问题,莫慌,看下文。

2.1 CMAKE 项目配置与编译数据库的生成

clang LSP 正常情况下是无法正常识别多文件项目的文件的,g++ 直接编译多文件项目也很麻烦,因此我们于此引入 CMAKE 进行项目管理并生成项目构建数据库供 clang 的语法补全使用。

  • 在根文件夹(例如workspace)创建一个.zed文件夹
  • 在项目目录创建 CMakeLists.txt 文件,(具体 CMAKE 使用此处限于篇幅不赘述了,仅给出一个示例)
cmake 复制代码
cmake_minimum_required(VERSION 3.29)

project(helloworld)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_BUILD_TYPE Debug)

add_executable(helloworld main.cpp)

注意 :重点是在于添加set(CMAKE_EXPORT_COMPILE_COMMANDS ON),这行的意思是要求 CMAKE 导出编译命令数据

  • .zed文件夹中新建tasks.json文件,写入以下任务
json 复制代码
[
  {
    "label": "CMAKE Build",
    "command": "cmake",
    "args": [
      "-DCMAKE_BUILD_TYPE=Debug",
      "-G",
      "'MinGW Makefiles'",
      "-S",
      "$ZED_DIRNAME",
      "-B",
      "$ZED_DIRNAME/cmake-build-debug"
    ],
    "use_new_terminal": false,
    "allow_concurrent_runs": false,
    "reveal": "always",
    "reveal_target": "dock",
    "hide": "never",
    "shell": "system"
  }
]

其中$ZED_DIRNAME/cmake-build-debug,是用于给 CMAKE 执行构建工作的文件夹,生成的编译数据库与与后面编译时生成的可执行文件都会在其中。

之后编写CMakeList.txt后,点击F4按键,选择task里的CMAKE Build即可

2.2 clangd 的配置与编译数据库的加载

  • 点击左上角三条杠->Zed->Open Settings打开设置,点击右上角Edit in settings.json打开配置文件
  • 在最后一个花括号前增加以下内容读取CMAKE输出的编译数据库(设置编译数据库所在的文件夹为上文设置的$ZED_DIRNAME/cmake-build-debug
json 复制代码
,              //这个逗号要加在倒数第二个花括号后

  "lsp": {
    "clangd": {
      "binary": {
        "arguments": ["--compile-commands-dir=$ZED_DIRNAME/cmake-build-debug"]
      }
    }
  }
  
  • 此时正常就可以读取到项目内由 CMAKE 管理的库和头文件了
  • 但 clangd 在 windows下默认不读取 gcc和g++的库,因此如果你没有安装Visual Studio之类的工具的话,此时 clangd 很可能会提示标准库头文件不存在,因此需要在根目录(workspace)中新建.clangd配置文件,在其中写入以下内容,设置 clangd 使用 MinGW
yaml 复制代码
CompileFlags:
  Add:
    - --target=x86_64-w64-windows-gnu
  • 如果编写时候没有语法高亮可以手动在右下角将语言设置为yaml,Zed会自动下载语言服务
  • 此时 clangd 就可以正常检测到项目文件和标准库头文件了

三、调试与运行

  • Zed 和 VS Code 类似,也是要通过一个json文件来配置调试环境的。
  • 由于我们使用了CMAKE,因此实际的构建命令就不是g++而是make了,但是windows没有make命令,mingw提供了名为"mingw32-make"的命令作为替代。
  • 因此我们编辑构建指令如下
json 复制代码
    "build": {
      "command": "mingw32-make",
      "args": ["-C", "$ZED_DIRNAME/cmake-build-debug"],
      "cwd": "$ZED_DIRNAME"
    },
  • 构建后设置可执行文件路径和用于调试的调试适配器
json 复制代码
[
  {
    "label": "(CPP) Make And Debug",
    "build": {
      "command": "mingw32-make",
      "args": ["-C", "$ZED_DIRNAME/cmake-build-debug"],
      "cwd": "$ZED_DIRNAME"
    },
    "program": "$ZED_DIRNAME/cmake-build-debug/$ZED_STEM.exe",
    "request": "launch",
    "adapter": "CodeLLDB",
    "stopAtBeginningOfMainSubprogram": true
  }
]
  • .zed文件夹中新建debug.json文件,写入以上内容保存
  • 再回到项目代码中,点击F4键,在Debug中选择(CPP) Make And Debug即可使用调试器调试并运行
  • (如果 CodeLLDB 下载失败的话可以挂梯子或者改用 GDB 适配器尝试)