带有 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.txt:2017969: 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
放入
【讨论】:
以上是关于带有 CMake 的 QtCreator,在编辑器中错误地解析了 __cplusplus 值的主要内容,如果未能解决你的问题,请参考以下文章
CMAKE_CXX_COMPILER 未在 qtcreator 中设置