0

0

如何为c++项目配置compile_commands.json以获得更好的工具支持? (Clangd/Clang-Tidy)

尼克

尼克

发布时间:2026-01-13 08:42:33

|

413人浏览过

|

来源于php中文网

原创

启用Clangd等工具需先生成compile_commands.json:CMake项目应在构建目录运行cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON;非CMake项目可用bear拦截编译命令;文件须为合法JSON、directory为绝对路径且Clangd按父目录逐级查找。

如何为c++项目配置compile_commands.json以获得更好的工具支持? (clangd/clang-tidy)

直接生成 compile_commands.json 是启用 Clangd、Clang-Tidy 等工具的前提,但多数 C++ 项目默认不生成它——必须通过构建系统显式开启。

用 CMake 生成 compile_commands.json 的正确方式

CMake 是目前最主流的支持途径,关键不是“能不能”,而是“怎么开才真正生效”。很多用户执行了 cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 却发现文件没出现,往往是因为没在构建目录里运行,或用了 Ninja/Make 混淆了路径。

  • 必须在 构建目录(build dir) 中运行 CMake 配置命令,而不是源码根目录
  • cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G "Ninja" ..cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..(后者依赖默认 generator)
  • 生成后,compile_commands.json 会出现在构建目录顶层,不是源码目录
  • 如果用 VS Code + CMake Tools 插件,需确保其“构建目录”设置与你手动配置的一致,否则插件可能读不到该文件

非 CMake 项目:手动构造或用 bear 拦截编译命令

对于 Makefile、autotools 或手写 build.sh 的项目,CMake 参数无效。此时不能靠改配置,得靠“捕获”真实编译过程。

  • bear 是最轻量可靠的方案:先装 bear(如 apt install bearbrew install bear),再用它包裹构建命令:bear -- makebear -- cmake --build .
  • 注意:bear 依赖 gcc/clang 的 wrapper 行为,若项目用 g++-12 或自定义编译器路径,需提前设好 CC/CXX 环境变量
  • 手动写 compile_commands.json 极易出错(比如 directory 字段路径不对、arguments 缺少 -I 或宏定义),不推荐

Clangd 读不到 compile_commands.json 的常见原因

即使文件存在,Clangd 仍可能 fallback 到简易解析,导致跳转不准、宏不展开、头文件找不到——这不是 Clangd 问题,而是路径或内容不匹配。

MaxAI
MaxAI

MaxAI.me是一款功能强大的浏览器AI插件,集成了多种AI模型。

下载

立即学习C++免费学习笔记(深入)”;

  • Clangd 默认只在当前打开文件的**父目录向上逐级查找** compile_commands.json,不会自动扫描子目录或符号链接外的路径
  • directory 字段必须是绝对路径,且指向实际执行编译命令的工作目录(否则 -I relative/path 会解析失败)
  • 如果项目含子模块(submodule)或外部依赖(如 third_party/),确保这些路径在 arguments 中以 -I-isystem 正确声明,Clangd 不会自动推断
  • VS Code 中,确认 "clangd.arguments" 设置没覆盖掉自动检测,例如删掉 --compile-commands-dir=... 这类硬编码路径
[
  {
    "directory": "/home/user/project/build",
    "command": "/usr/bin/clang++ -I../include -DDEBUG -std=c++20 -c ../src/main.cpp",
    "file": "../src/main.cpp"
  }
]

路径不一致、字段名拼错(比如写成 cmd 而非 command)、JSON 格式非法(末尾多逗号、中文引号),都会让整个文件被忽略——Clangd 不报错,只静默降级。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

411

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

532

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

10

2026.01.12

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

106

2026.01.09

c++框架学习教程汇总
c++框架学习教程汇总

本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

64

2026.01.09

学python好用的网站推荐
学python好用的网站推荐

本专题整合了python学习教程汇总,阅读专题下面的文章了解更多详细内容。

139

2026.01.09

学python网站汇总
学python网站汇总

本专题整合了学python网站汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.2万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号