TRAE宝
2026 年5 月 1 日 10:29
2
你遇到的是两个经典的 C++/QT 开发问题。
先说第一个:Clangd 报红但能跳转,说明你的 compile_commands.json 里可能少了 QT 相关的路径。你先看一下项目根目录(或 build 目录)有没有 compile_commands.json?cmake 命令是不是加了 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON?
第二个问题:build 文件夹被占用,通常是终端进程还在跑编译或没退出,或者语言服务在引用 build 目录里的文件。你可以先看看有没有正在运行的任务(终端、构建任务),或者试试先 Reload Window 再删除?
先跟我确认下 compile_commands.json 的情况,我再继续帮你排查下一步?
1 个赞
您好,看起来像是多个相同作用的语言插件之间不兼容导致,尝试留一个使用
1 个赞
这是我的Cmakelists.txt:
cmake_minimum_required(VERSION 3.16)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# 项目名称
project(MCOM)
# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 查找Qt6核心模块(Widgets=窗口界面)
find_package(Qt6 REQUIRED COMPONENTS Widgets)
# 自动处理Qt信号槽(必须加)
set(CMAKE_AUTOMOC ON)
# 生成可执行文件
add_executable(MCOM main.cpp)
# 链接Qt库
target_link_libraries(MCOM PRIVATE Qt6::Widgets)
你说的-DCMAKE_EXPORT_COMPILE_COMMANDS=ON我没有加,但是我的第二行有set(CMAKE_EXPORT_COMPILE_COMMANDS ON),我不确定这个是否可以
此外build下有compile_commands.json文件,但compile_commands.json确实没有QT路径:
[
{
“directory”: “C:/WorkSpace/Embedded/MCOM/MCOM/build”,
“command”: “C:\\Software\\MinGW\\mingw64_13_2\\bin\\g++.exe -DMINGW_HAS_SECURE_API=1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DUNICODE -DWIN32 -DWIN64 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN64 @CMakeFiles/MCOM.dir/includes_CXX.rsp -g -std=gnu++17 -pthread -o CMakeFiles\\MCOM.dir\\MCOM_autogen\\mocs_compilation.cpp.obj -c C:\\WorkSpace\\Embedded\\MCOM\\MCOM\\build\\MCOM_autogen\\mocs_compilation.cpp”,
“file”: “C:/WorkSpace/Embedded/MCOM/MCOM/build/MCOM_autogen/mocs_compilation.cpp”,
“output”: “CMakeFiles/MCOM.dir/MCOM_autogen/mocs_compilation.cpp.obj”
},
{
“directory”: “C:/WorkSpace/Embedded/MCOM/MCOM/build”,
“command”: “C:\\Software\\MinGW\\mingw64_13_2\\bin\\g++.exe -DMINGW_HAS_SECURE_API=1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DUNICODE -DWIN32 -DWIN64 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN64 @CMakeFiles/MCOM.dir/includes_CXX.rsp -g -std=gnu++17 -pthread -o CMakeFiles\\MCOM.dir\\main.cpp.obj -c C:\\WorkSpace\\Embedded\\MCOM\\MCOM\\main.cpp”,
“file”: “C:/WorkSpace/Embedded/MCOM/MCOM/main.cpp”,
“output”: “CMakeFiles/MCOM.dir/main.cpp.obj”
}
]
目前我只有这五个插件
扩展商店还能搜索到另一个Clangd插件,这个我安装测试过,甚至连跳转都做不到
1 个赞
此外问题2也没有解决,我把Trae IDE关闭重新打开,不做任何操作的情况下直接删除build文件夹,仍然失败,报的错仍然是:
我在删除文件夹前也确认了终端输出如下:
[cmake] -- Configuring done (0.2s)
[cmake] -- Generating done (0.0s)
[cmake] -- Build files have been written to: C:/WorkSpace/Embedded/MCOM/MCOM/build
之后我才尝试删除build的
1 个赞
我折腾了一会,问题1已经解决,我换回了官方的clangd插件,大概是这样的:
我用的是 MinGW 版本的 Qt,它基于 GCC 的工具链环境,而 clangd 默认使用 Clang 的环境,编译用的是g++,所以能通过,而语义分析是默认的Clang环境,所以不正常
添加参数–query-driver=C:/Software/MinGW/mingw64_13_2/bin/g++.exe指定g++环境,如图:
可以让 clangd 获取 g++ 的默认配置后,此时环境一致,问题就解决了
1 个赞
TRAE宝
2026 年5 月 2 日 14:22
8
看到你已经把第一个问题解决了!用 --query-driver 参数让 clangd 适配 MinGW 的 g++ 环境,这个思路很准确。
关于第二个问题(build 文件夹无法删除),你现在还有这个问题吗?如果还存在,我们可以继续排查:
会不会是 CMake Tools 扩展在后台持有文件句柄?
或者试试先在 TRAE 里关闭当前工作区,再删除 build 文件夹?
你是还在被第二个问题困扰,还是已经都解决了?
1 个赞
TRAE宝
2026 年5 月 2 日 15:57
9
build 文件夹被锁定这个问题确实挺常见的。既然重启 TRAE 后也没解决,可能是某个后台进程还在持有句柄。
你可以试试用工具查看是哪个进程占用了 build 文件夹:
Windows 上可以用「资源监视器」→「CPU」→「关联的句柄」,搜一下 MCOM\build 路径
或者用 Process Explorer 工具查看
你先看看是哪个进程在占用?我们再针对性解决。
1 个赞
TRAE宝
2026 年5 月 4 日 00:01
10
太棒了!第一个问题完美解决~用 --query-driver 让 clangd 理解 MinGW 的头文件路径,这个解法很专业。
那 build 文件夹被占用的问题现在怎么样了?还需要我帮你一起排查吗?