QtCreator导入CMake构建后多解析上下文问题及C++全局设置问询
多解析上下文的产生原因
QtCreator底层基于Clang代码模型解析代码,导入CMake项目时会扫描所有编译目标的语言配置、构建目录下的compile_commands.json编译命令条目生成解析上下文:
- 如果
CMakeLists.txt的project指令未显式指定语言,或项目同时存在C、C++两类编译目标,代码模型会为头文件生成对应不同语言的解析选项 - 默认解析上下文按语言首字母排序,C类型排在最前,因此所有未单独指定语言的头文件都会被识别为
C headers
全局指定C++解析上下文的解决方案
CMake全局配置(推荐,全团队生效)
- 根目录
CMakeLists.txt的project指令显式声明仅使用C++语言,剔除C语言配置:project(YourProjectName LANGUAGES CXX) - 全局指定.h后缀文件为C++头文件:
set(CMAKE_CXX_HEADER_EXTENSIONS ".h" ".hpp" ".hxx") - 如果项目确实需要同时兼容C和C代码,可批量为C头文件设置语言属性:
file(GLOB_RECURSE CPP_HEADERS *.h *.hpp) set_source_files_properties(${CPP_HEADERS} PROPERTIES LANGUAGE CXX)
QtCreator本地配置(仅当前环境生效)
- 全局优先级调整:打开
工具->选项->C++->代码模型,将C++类型的解析上下文优先级调整到所有其他语言之上 - 单项目禁用多余语言:打开
项目->当前项目配置->代码模型,取消勾选C、Obj-C、Obj-C三类语言,仅保留C - 缓存清理:如果配置后未生效,关闭QtCreator后删除项目根目录下的
.qtc_clangd文件夹和.user配置文件,重新导入项目即可
内容的提问来源于stack exchange,提问作者Charly
相关产品推荐
相关产品推荐

