Clang 代码模型
代码模型是集成开发环境(IDE)中能够理解您用于编写应用程序的编程语言的部分。正是这一框架使Qt Creator 能够提供以下服务:
Clang 代码模型插件在Clangd 的基础上为 C++ 提供了一些此类服务。
关于 Clang 代码模型
Clang 项目提供了用于解析 C 语言家族源文件的库。您通过警告和错误标记获得的反馈与编译器提供的完全一致,而非像使用内置的Qt Creator 代码模型时那样,仅获得不完整的信息或近似结果。 Clang 侧重于提供详细的诊断信息,这在代码存在拼写错误等情况下非常有用。我们通过 clangd 工具调用这些库,该工具实现了一个LSP服务器。
Clang 紧跟 C++ 语言的发展步伐。截至本文撰写之时,它支持 C++98/03、C++11、C++14、C++17、C89、C99、Objective-C 以及 Objective-C++。
不过,对于大型项目,使用 Clang 作为代码模型的速度会比使用内置代码模型慢。Clang 虽然不需要生成目标文件,但仍需对源文件进行解析和分析。对于仅使用 STL 的小型项目,这一过程相对较快。 但对于包含多个文件的大型项目,处理单个文件及其所有包含文件可能需要一段时间。
Clang 代码模型插件现在提供了一些与内置 C/C++ 代码模型相同的功能:
- 代码补全
- 语法和语义高亮
- 诊断
- 符号大纲
- 工具提示
- 后续符号
- 重命名符号
- 查找符号的出现位置
若要改用内置代码模型,请选择“Preferences ” > “C++ ” > “clangd ”,并取消勾选“Use clangd ”。此设置在项目级别也存在,因此您可以将基于 Clang 的服务全局启用,但针对特定项目将其关闭,反之亦然。
您可以为以下内容配置 Clang 诊断:
- Clang 代码模型(全局或项目级别)
- Clang 工具(全局或项目级别)
Clangd 索引
clangd索引可为查找引用、追踪光标下符号以及使用定位器等服务提供精确且完整的结果,即使面对复杂的代码结构也是如此。当您打开一个项目时,clangd 会扫描源文件以生成索引。 对于大型项目,此过程可能需要一段时间,但索引是持久的,且重新扫描采用增量方式,因此关闭并重新启动Qt Creator 不会丢失任何数据。
若要临时禁用全局索引,请选择“Toggle Progress Details ”(1),然后在进度条上选择“X ”。

默认情况下,Qt Creator 会为每个项目运行一个 clangd 进程。如果您创建了包含相关项目的会话,可以指定该会话中的项目应由单个 clangd 进程管理。
“大纲”视图中的文档大纲基于 clangd 的文档符号支持,这使得结果比以前更可靠。
另请参阅 “配置 C++ 代码模型”、“指定 clangd 设置”、“指定 Clang 工具设置”、“使用编译数据库”、“代码模型”和“Clangd”。
Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.