Trae IDE + WSL2 openEuler 构建 openGauss开发环境
文档版本:V2.0
适用环境:Windows 10/11 + Trae IDE + WSL2 openEuler-22.03 x86_64 + openGauss-server 源码
核心目标:实现 WSL 内编译、Trae 远程 clangd 全量代码跳转、GDB 调试及一键打包
一、整体架构与核心原理
1.1 核心结论
代码跳转、编译、Git、终端、clangd 语言服务、GDB 调试全部运行在 WSL 子系统;Windows Trae 只负责显示 UI 界面,不处理任何代码解析/编译逻辑;源码必须放在 WSL Linux 家目录(/home/wangchao/xxx),禁止放 Windows C/D 盘。
1.2 分层架构拆解(谁在干活)
Windows 端:Trae 客户端(纯界面层)
-
只负责:窗口、文字渲染、鼠标点击、快捷键、文件预览展示
-
不运行 clangd、cmake、gcc、git、调试器
-
所有代码读写、语法分析、跳转请求都通过进程通道转发给 WSL 内的服务端处理
WSL openEuler 端:Trae 服务端(真正的工作空间载体)
连接 WSL 后,Trae 自动在子系统内安装配套服务,所有开发任务在此执行:
-
代码文件物理存储(源码、
tmp_build、binarylibs、compile_commands.json等) -
clangd LSP 语言服务:读取 WSL 内的
compile_commands.json、头文件、源码做索引和跳转 -
编译脚本
build.sh:调用 WSL 里的 cmake/gcc/flex/bison -
Git 版本控制:使用 WSL 内置 git,识别 Linux 文件权限和 LF 换行
-
GDB 调试:调试器运行在 WSL,附加 WSL 编译出的 gaussdb 进程
-
工作空间配置(
.clangd、IDE 设置、编译缓存)全部存在 WSL 内部
1.3 文件路径两种模式对比(为什么禁止 Windows 盘符)
| 模式 | 特点 | 结论 |
|---|---|---|
WSL 家目录 /home/wangchao/openGauss-server |
原生 Linux inotify 监听,读写快;路径解析无错乱;软链接正常;权限、头文件、三方库完全匹配 | |
Windows 盘 /mnt/c/xxx |
通过 DrvFs 挂载,读写慢几十倍;Linux 权限/符号链接支持不全;clangd 路径混乱;编译异常 |
1.4 WSL2 工作空间数据物理存储位置(openEuler WSL)
核心存储原理
WSL2 是轻量 Hyper-V 虚拟机,整个 Linux 系统、源码、binarylibs、编译产物、配置全部存放在单个虚拟磁盘文件 ext4.vhdx,Windows 资源管理器看不到 Linux 内部文件夹。
-
你的离线导入方式:
wsl --import openEuler-22.03 D:\WSL\openEuler-2203 tar包路径虚拟磁盘文件位于
D:\WSL\openEuler-2203\ext4.vhdx,所有 WSL 内数据(/home/wangchao/...)都存在这里面。 -
Windows 访问 WSL 文件的两种方式:
-
文件管理器地址栏输入
\\wsl$\openEuler-22.03可浏览(只读建议) -
WSL 内
/mnt/c/、/mnt/d/访问 Windows 磁盘(跨盘共享)
-
区分两类数据(风险不同)
-
WSL 内部数据(危险):
/home/wangchao/、系统配置、编译产物、源码仓库 → 全在虚拟磁盘,注销 WSL 会彻底清空 -
Windows 本地磁盘数据(安全):
/mnt/d/code/、手动拷贝的备份、导出的 tar 包 → 与虚拟磁盘隔离
1.5 数据安全与备份规范
误操作会不会丢失数据?
-
仅重启 WSL /
wsl --shutdown/ 关机 → 不会丢失 -
WSL 内
rm -rf ~/openGauss-server→ 代码直接丢失,不可逆 -
wsl --unregister openEuler-22.03→ 全部数据永久清空(最高风险) -
手动删除
ext4.vhdx→ 等同于格式化,数据全丢 -
重置/卸载 WSL 发行版 → 视选项而定,可能清空
强制安全规范
-
核心源码优先推 Git 仓库(最可靠备份)
-
定期导出 WSL 完整快照:
wsl --shutdown wsl --export openEuler-22.03 D:\WSL_Backup\oe2203_full_backup.tar恢复:
wsl --unregister openEuler-22.03 wsl --import openEuler-22.03 D:\WSL\openEuler-2203 D:\WSL_Backup\oe2203_full_backup.tar --version 2 -
源码单独拷贝到 Windows 磁盘(定期):
cp -r ~/openGauss-server /mnt/d/code_backup/ cp -r ~/binarylibs /mnt/d/code_backup/ -
高危操作禁止:随意
wsl --unregister、手动删除ext4.vhdx、WSL 内sudo rm -rf ~/*、完全重置发行版
二、环境搭建
2.1 Windows 启用 WSL2(管理员 PowerShell)
# 启用 WSL 和虚拟机平台(若已启用可跳过)
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 重启电脑后执行
wsl --set-default-version 2
# 下载并安装 WSL2 内核更新包(https://aka.ms/wsl2kernel)
常用 WSL 管理命令:
wsl -l -v # 查看发行版列表
wsl --shutdown # 关闭全部 WSL
wsl -d openEuler-22.03 -u root # root 登录
2.2 openEuler WSL 离线安装与初始化
-
下载根文件系统(openEuler 22.03 LTS SP4 x86_64):
https://dl-cdn.openeuler.openatom.cn/openEuler-22.03-LTS-SP4/WSL/openEuler-22.03-LTS-SP4-x86_64-wsl.tar.gz -
导入 WSL:
mkdir D:\WSL\openEuler2203 wsl --import openEuler-22.03 D:\WSL\openEuler2203 D:\路径\openEuler-22.03-LTS-SP4-x86_64-wsl.tar.gz -
开启 systemd(支持 sshd 等服务):
sudo tee /etc/wsl.conf <<EOF [boot] systemd=true EOFPowerShell 执行
wsl --shutdown重启生效。 -
配置 sudo 免密:
sudo usermod -aG wheel wangchao sudo visudo # 修改 %wheel ALL=(ALL) NOPASSWD: ALL -
安装 SSH 服务(可选,方便远程):
sudo dnf install -y openssh-server sudo systemctl enable --now sshd
2.3 安装全套编译依赖
sudo dnf update -y
sudo dnf groupinstall "Development Tools" -y
sudo dnf install -y libedit-devel libxml2-devel lz4-devel numactl-devel unixODBC-devel \
java-1.8.0-openjdk-devel make binutils libaio-devel flex bison ncurses-devel \
glibc-devel patch readline-devel openblas-devel which python3 dkms cmake gcc gcc-c++
特别注意:
cmake、flex、bison是编译必须,groupinstall 不包含需单独安装。
2.4 预编译第三方库 binarylibs 部署
mkdir -p /home/wangchao/binarylibs
wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/latest/binarylibs/gcc10.3/openGauss-third_party_binarylibs_openEuler_2203_x86_64.tar.gz -P ~/download
tar -zxvf ~/download/openGauss-third_party_binarylibs_openEuler_2203_x86_64.tar.gz -C /home/wangchao/binarylibs --strip-components=1
sudo chown -R $USER:$USER /home/wangchao/binarylibs
ls /home/wangchao/binarylibs # 校验
三、Trae IDE 配置
3.1 插件安装与冲突处理
-
完全卸载微软官方「C/C++ (cpptools)」插件(与 clangd 冲突)
-
必须安装三个核心插件:
-
Open Remote - WSL(远程连接)
-
clangd(C/C++ LSP 语言服务)
-
CMake Tools(CMake 可视化编译调试)
-
3.2 关于 clangd Linux 二进制自动下载的说明
当你在 Trae 中打开 WSL 远程工作区时,clangd 插件会自动检测 WSL 内是否已有 Linux 版 clangd 可执行文件。若没有,会弹窗下载 clangd-linux-22.1.6.zip(或对应版本),并解压到 ~/.vscode-server/extensions/llvm-vs-code-ext.vscode-clangd-xxx/clangd_bin/linux/。
-
不要点击「取消」,否则无跳转无提示。
-
该二进制是 Linux x86_64 ELF 程序,与 Windows 版 exe 不通用,必须单独下载。
-
若网络差,可手动下载 zip 包,通过
/mnt/d传入 WSL,解压到上述目录,重启 Trae 窗口即可跳过自动下载。 -
不要用
dnf install clangd系统包代替,插件会优先使用自己的配套版本,版本不匹配会引发索引异常。
3.3 settings.json 关键配置(工作区或用户设置)
{
"clang.compileCommands": "${workspaceFolder}/compile_commands.json",
"clangd.backgroundIndexing": true,
"files.exclude": {
"**/tmp_build/**": true,
"**/output/**": true,
"**/package/**": true,
"**/binarylibs/**": true
}
}
3.4 连接 WSL 远程工作区
-
左侧「远程资源管理器」→ WSL Targets → 选中
openEuler-22.03→ 在新窗口连接 -
连接后左下角显示
WSL: openEuler-22.03,说明工作空间在 WSL 内 -
在 WSL 终端中克隆源码(必须放在家目录):
git clone https://gitcode.com/wang4721/openGauss-server.git ~/openGauss-server cd ~/openGauss-server
四、openGauss 编译(生成 compile_commands.json)
4.1 两种编译模式对比
| 模式 | 编译目录 | 是否生成 compile_commands.json | 适用场景 |
|---|---|---|---|
传统 Make(不加 --cmake) |
build |
仅测试编译 | |
CMake 模式(加 -C) |
tmp_build |
开发调试、clangd 跳转 |
4.2 CMake 编译标准命令(生成编译数据库)
# 清理旧产物
rm -rf tmp_build output mppdb_temp_install
# 仅编译调试(不打包)
sh build.sh -m debug -C -3rd /home/wangchao/binarylibs/ --cmake_opt "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
# 编译并打包安装包(加 -pkg)
sh build.sh -m debug -C -3rd /home/wangchao/binarylibs/ --cmake_opt "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON" -pkg
参数解释:
-
-m debug:调试版本,带调试符号 -
-C:启用 CMake(等价--cmake,兼容性更好) -
-3rd:指定三方库路径 -
--cmake_opt "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON":关键,强制生成compile_commands.json -
-pkg:生成离线安装包到package目录
编译完成后检查:
ls tmp_build/compile_commands.json # 必须存在
五、clangd 跳转配置
5.1 创建编译数据库软链接
clangd 默认读取源码根目录的 compile_commands.json:
cd ~/openGauss-server
ln -sf tmp_build/compile_commands.json compile_commands.json
ls -l compile_commands.json # 确认链接有效
5.2 项目根目录 .clangd 配置文件(兜底头文件路径)
新建 ~/.clangd(或在项目根目录创建 .clangd),内容:
CompileFlags:
Add:
- -I${workspaceFolder}/src/include
- -I${workspaceFolder}/src/common
- -I${workspaceFolder}/tmp_build/include
- -I/home/wangchao/binarylibs
Remove: [-Werror]
Index:
StandardLibrary: true
Background: true
Threads: 8
Cache: ${workspaceFolder}/.clangd_cache
Diagnostics:
UnusedIncludes: Strict
5.3 重启 clangd 服务
Trae 中快捷键 Ctrl+Shift+P → 输入 clangd: Clean restart language server,等待索引完成即可正常跳转、补全。
六、调试与实例操作
6.1 增量重编译
修改源码后无需全清,再次执行上述 CMake 编译命令即可增量构建(tmp_build 保留)。
6.2 初始化并启动数据库实例
# 初始化数据目录
./mppdb_temp_install/bin/gs_initdb -D ./data
# 启动数据库
./mppdb_temp_install/bin/gs_ctl start -D ./data
# 停止数据库
./mppdb_temp_install/bin/gs_ctl stop -D ./data
6.3 Trae 中 GDB 调试
安装 CMake Tools 插件后,选择 Debug 目标,附加 gaussdb 进程即可断点调试内核。
七、build.sh 关键参数速查表
| 参数 | 作用 |
|---|---|
-m debug/release |
编译版本,调试用 debug |
-C / --cmake |
启用 CMake 编译分支(必须) |
-3rd 路径 |
指定 binarylibs 三方库路径 |
--cmake_opt "xxx" |
追加自定义 CMake 参数(必须包含 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON) |
-pkg |
编译完成后打包生成安装包 |
-bs 4096/8192 |
数据库块大小,默认 8192 |
-pm opengauss/lite |
产品模式 |
八、高频故障排查
8.1 执行 --cmake 只生成 build,无 tmp_build
原因:参数未被脚本捕获。
解决:改用短参数 -C 替代 --cmake,并确保携带 -m debug 等参数。
8.2 tmp_build 内无 compile_commands.json
原因:未添加 --cmake_opt "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"。
解决:编译命令追加该参数,清理后重新编译。
8.3 cmake: command not found
sudo dnf install -y cmake gcc-c++
8.4 sshd 启动失败(Unit not found)
sudo dnf install openssh-server
# 确认 /etc/wsl.conf 中 systemd=true,重启 WSL
8.5 Trae 无法跳转、头文件找不到
-
确认软链接
compile_commands.json有效 -
确认编译使用 CMake 并开启了导出参数
-
重启 clangd 语言服务
-
检查
.clangd是否包含必要的头文件路径(binarylibs、tmp_build/include)
8.6 编译提示缺失 xxx-devel
执行第二章全套依赖安装命令补齐。
8.7 clangd 弹窗下载失败或卡住
-
保持网络畅通等待,或手动下载对应 Linux 包放入 WSL 插件目录(见第三章 3.2 节)
-
切勿取消,否则语言服务失效
九、附录:运维快捷命令
WSL 系统管理
wsl -l -v # 查看发行版
wsl --shutdown # 关闭全部
wsl -t openEuler-22.03 # 单独关闭
wsl -d openEuler-22.03 -u root # root 登录
wsl --unregister openEuler-22.03 # 彻底卸载(高危!数据全丢)
openGauss 编译与清理
# 清理全部产物
rm -rf tmp_build output mppdb_temp_install
# 重建软链接
ln -sf tmp_build/compile_commands.json compile_commands.json
# 查看系统版本
cat /etc/os-release
# 校验三方库
ls /home/wangchao/binarylibs
数据备份与恢复(安全)
-
源码推 Git(首选)
-
全量导出 WSL 快照(见 1.5 节)
-
源码拷贝到 Windows 磁盘(
cp -r ~/openGauss-server /mnt/d/backup/)
提醒:所有开发操作必须在 WSL 远程工作区内进行(左下角显示
WSL: openEuler-22.03),源码必须置于 WSL 家目录。