带有 CMake 的 QtCreator,在编辑器中错误地解析了 __cplusplus 值

Posted

技术标签:

【中文标题】带有 CMake 的 QtCreator,在编辑器中错误地解析了 __cplusplus 值【英文标题】:QtCreator with CMake, Incorrectly parsed __cplusplus value in editor 【发布时间】:2019-05-03 03:51:42 【问题描述】:

我在启用 C++17 的 QtCreator 中使用了一个 CMake 项目。

我可以毫无问题地编译和使用 C++17 功能。打印__cplusplus 的值时,我得到201703,但是当我将鼠标悬停在QtCreator 编辑器中的宏上时,它显示1 的值。

因此,我没有为任何 C++11(及更高版本)功能获得任何代码完成或突出显示。处理起来很烦人。

<memory> 等标准标头有一堆检查,例如:

#if __cplusplus >= 201103L
// unique_ptr and shared_ptr

由于__cplusplus 值不正确,编辑器禁用该条件下的所有代码。

环境:

Fedora 29 CMake 3.12 GCC 8.3.1 QtCreator 4.7.2 (Qt 5.11.3)

这是 QtCreator 和 CMake 项目的已知问题吗?是否有变通办法让 QtCreator 编辑器使用 CMake/GCC 提供的正确 __cplusplus 值解析代码?

【问题讨论】:

有趣的是,在我的系统上,QtCreator (4.9.0) 在将鼠标悬停在它上面时不会展开这个宏,但会得到正确的条件。您是否通过右键单击 --> Find References to Symbol under Cursor 检查了定义宏的位置以及在这种情况下它具有哪个值? 通过 Find Usages 显示:#define __cplusplus 1<configuartion> 文件下。我试图点击它,但收到一条错误消息,提示该文件可能不存在或我没有打开它的权限。 我找到了用于QtCreator代码模型检查的tmp文件:tmp/QtCreator-bhGcmE/qtc-codemodelinspection_190502_165446.txt2017969: at line 3: #define __cplusplus 1它被归类为未定义的宏。 【参考方案1】:

QtCreator 4.7.2 似乎有一个关于__cplusplus 被定义为1 的错误。升级到 4.9.0 现在可以将 __cplusplus 正确定义为 201703(用于 C++17 Cmake 项目)。

【讨论】:

【参考方案2】:

#define __cplusplus 201103L 放入 .config 文件对我有用。

【讨论】:

以上是关于带有 CMake 的 QtCreator,在编辑器中错误地解析了 __cplusplus 值的主要内容,如果未能解决你的问题,请参考以下文章

QtCreator 找不到 cmake

使用 cmake 部署 QtCreator

cmake 安装后从 QtCreator 运行项目

CMAKE_CXX_COMPILER 未在 qtcreator 中设置

QtCreator 1.3、Qt 4.6.2 和 cmake 在 windows 上的构建问题

使用 CMake 编译 QTCreator 和 VisualStudio 代码