-
-
[原创]Zed Editor 基于 CMAKE 和 (可选:Ninja 构建系统) 的 C 开发环境搭建
-
-
[原创]Zed Editor 基于 CMAKE 和 (可选:Ninja 构建系统) 的 C 开发环境搭建
一、 工具链安装
- 安装 Zed Editor
- 安装 CMake
- 安装 MinGW-w64
- 配置以上工具链到系统Path变量
- 开始菜单搜索
编辑系统环境变量
- 点击右下角
环境变量
- 双击下方系统变量栏中的
Path
- 通过点击
新建再点击浏览的方式即可添加路径到Path变量
- 将上面安装的CMake和MinGW里的bin文件夹逐一添加即可
- 测试环境
- 在桌面右键,选择
在终端中打开
- 分别输入以下两条指令测试是否能正常显示版本信息
1 2 3 | g++ -v //测试g++是否可用,可用的话输出版本信息
cmake -version //测试cmake是否可用,可用的话输出版本信息
|
如果正常的话显示效果应该与下图类似
![[{C8C0B85E-3B69-4685-98B0-A86E3F3796BE}.png]]
二、项目结构创建
2.1 基本项目创建(以 hello world 为示例)
- 创建一个目录作为
Zed的工作目录( 例如 workspace 文件夹),用 Zed 编辑器打开。
- 新建一个目录用于存放项目(例如 helloworld )
- 新建 main.cpp 文件写入测试代码
1 2 3 4 5 6 | #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_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文件,写入以下任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | [
{
"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)
1 2 3 4 5 6 7 8 9 10 | ,
"lsp": {
"clangd": {
"binary": {
"arguments": ["--compile-commands-dir=$ZED_DIRNAME/cmake-build-debug"]
}
}
}
|
- 此时正常就可以读取到项目内由 CMAKE 管理的库和头文件了
- 但 clangd 在 windows下默认不读取 gcc和g++的库,因此如果你没有安装
Visual Studio之类的工具的话,此时 clangd 很可能会提示标准库头文件不存在,因此需要在根目录(workspace)中新建.clangd配置文件,在其中写入以下内容,设置 clangd 使用 MinGW
1 2 3 | CompileFlags:
Add:
- --target=x86_64-w64-windows-gnu
|
- 如果编写时候没有语法高亮可以手动在右下角将语言设置为
yaml,Zed会自动下载语言服务
- 此时 clangd 就可以正常检测到项目文件和标准库头文件了
三、调试与运行
- Zed 和 VS Code 类似,也是要通过一个json文件来配置调试环境的。
- 由于我们使用了CMAKE,因此实际的构建命令就不是g++而是make了,但是windows没有make命令,mingw提供了名为"mingw32-make"的命令作为替代。
- 因此我们编辑构建指令如下
1 2 3 4 5 | "build": {
"command": "mingw32-make",
"args": ["-C", "$ZED_DIRNAME/cmake-build-debug"],
"cwd": "$ZED_DIRNAME"
},
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [
{
"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 适配器尝试)
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!