gen_compile_commands.sh

下面是为你的项目结构 量身定制 的完整脚本:

它会扫描所有 .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) 个源文件。"

✅ 使用方法

  1. 将脚本保存为:

    bash 复制代码
    gen_compile_commands.sh
  2. 加可执行权限:

    bash 复制代码
    chmod +x gen_compile_commands.sh
  3. 在项目根目录运行它:

    bash 复制代码
    ./gen_compile_commands.sh
  4. 会在当前目录生成:

    复制代码
    ./compile_commands.json

✅ clangd 就绪!

打开 Neovim,确认 clangd 可以正确跳转:

  • gd 跳转定义
  • gr 查找引用
  • K 查看文档
  • <C-Space> 补全提示

如需要,我还可以帮你配置 .clangd 或 .clang-format 文件,是否需要?

相关推荐
吴声子夜歌6 天前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
吴声子夜歌7 天前
Shell编程实例——内务及管理任务(一)
linux·运维·shell
吴声子夜歌7 天前
Shell编程实例——高级脚本编程(一)
linux·运维·网络·shell
吴声子夜歌7 天前
Shell编程实例——bash的配置与自定义(二)
linux·运维·shell
吴声子夜歌8 天前
Shell编程实例——与解析相关的任务(二)
linux·运维·shell
吴声子夜歌8 天前
Shell编程实例——脚本编程的附加特性
linux·运维·shell
云计算练习生8 天前
什么是内核?操作系统内核到底管哪些事
linux·windows·操作系统·内核·shell
吴声子夜歌11 天前
Shell编程实例——bash入门
linux·运维·shell
Swizard11 天前
Linux 日志神器 journalctl 完全指南:彻底替代传统日志查看方式
shell
吴声子夜歌12 天前
Shell编程——数组
linux·运维·shell