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

最近在编译一个用到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联合挖坑啊!

转载于:https://my.oschina.net/lieefu/blog/812621

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值