Qt5.7以及5.8在cmake工程中使用C++14编译遇到的问题及解决方案

妖精的绣舞 提交于 2020-03-23 16:35:16

3 月,跳不动了?>>>

最近在编译一个用到C++14特性的工程时,遇到这样一个问题。

编译时报:error: ‘decay_t’ is not a member of ‘std’

std::decay_t属于C++14加入的特性,需要 #include <type_traits>,set(STD_CXX -std=gnu++14) 使用 C++14也可以。

但这些设置都是有的,查看type_traits文件,发现这些新特性语句在 #if __cplusplus > 201103L 语句中包含,把main函数只剩std::cout << __cplusplus  <<std::endl; 发现,__cplusplus是201103

这就纳闷了,明明已经指定set(STD_CXX -std=gnu++14) 了呀,__cplusplus应是201402

其它工程测试,__cplusplus是201402,因此怀疑是Qt5导致的,通过逐步删除CMakeList.txt文件中的与Qt5相关的语句调试,发现,只有加入 target_link_libraries(${PROJECT_NAME}  Qt5::Widgets Qt5::Qml),__cplusplus就成为201103,使用Qt5.6版本,没有这个问题,5.8跟5.7一样,有此问题。

Qt官网求答案,原来是这样:

If you use Qt 5.7 and a CMake version above 3.1.0, plus require a more recent C++ standard version, use the CMake way of selecting the standard version, or specify features required and let CMake compute the flags. Example:

set(CMAKE_CXX_STANDARD 14)

在CMakeList.txt文件中加入这一句,问题得以解决。真是Qt5跟cmake联合挖坑啊!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!