下面是为你的项目结构 量身定制 的完整脚本:
它会扫描所有 .cpp
文件,添加正确的 -I
包含目录,输出符合 clangd
要求的 compile_commands.json
文件。
✅ 请将以下内容保存为 gen_compile_commands.sh
bash
#!/bin/bash
# 项目根目录
PROJECT_DIR=$(pwd)
# 所有的头文件包含路径(根据你的 tree.txt 自动生成)
INCLUDES="-IAlarm/include \
-ICondition/include \
-IControl/include \
-ICore/include \
-IDataLog/include \
-IIO/include \
-IInterlock/include \
-IRecipe/include \
-IRemoteAccess/include \
-ISetup/include"
# 其他通用编译选项(根据你的 make.txt 提取)
CXXFLAGS="-Wall -Wextra -g -O0 -DDEBUG -fPIC -std=c++98"
# 开始生成 JSON 文件
echo "[" > compile_commands.json
# 标记是否是第一个条目(用于避免最后多逗号)
first=1
# 遍历所有 .cpp 文件
find . -name "*.cpp" | while read file; do
# 添加逗号(跳过第一个)
if [ $first -eq 0 ]; then
echo "," >> compile_commands.json
fi
first=0
echo " {" >> compile_commands.json
echo " \"directory\": \"$PROJECT_DIR\"," >> compile_commands.json
echo " \"command\": \"g++ $CXXFLAGS $INCLUDES -c $file\"," >> compile_commands.json
echo " \"file\": \"$file\"" >> compile_commands.json
echo -n " }" >> compile_commands.json
done
# 结束 JSON
echo "" >> compile_commands.json
echo "]" >> compile_commands.json
echo "✅ compile_commands.json 生成完毕,共包含 $(grep -c 'file' compile_commands.json) 个源文件。"
✅ 使用方法
-
将脚本保存为:
bashgen_compile_commands.sh
-
加可执行权限:
bashchmod +x gen_compile_commands.sh
-
在项目根目录运行它:
bash./gen_compile_commands.sh
-
会在当前目录生成:
./compile_commands.json
✅ clangd 就绪!
打开 Neovim,确认 clangd
可以正确跳转:
gd
跳转定义gr
查找引用K
查看文档<C-Space>
补全提示
如需要,我还可以帮你配置 .clangd
或 .clang-format
文件,是否需要?