Qt5.7以及5.8在cmake工程中使用C++14編譯遇到的問題及解決方案

原文連接:https://my.oschina.net/lieefu/blog/812621架構

爲何80%的碼農都作不了架構師?>>>   hot3.png函數

最近在編譯一個用到C++14特性的工程時,遇到這樣一個問題。測試

編譯時報:error: ‘decay_t’ is not a member of ‘std’ui

std::decay_t屬於C++14加入的特性,須要 #include <type_traits>,set(STD_CXX -std=gnu++14) 使用 C++14也能夠。.net

但這些設置都是有的,查看type_traits文件,發現這些新特性語句在 #if __cplusplus > 201103L 語句中包含,把main函數只剩std::cout << __cplusplus  <<std::endl; 發現,__cplusplus是201103調試

這就納悶了,明明已經指定set(STD_CXX -std=gnu++14) 了呀,__cplusplus應是201402code

其它工程測試,__cplusplus是201402,所以懷疑是Qt5致使的,經過逐步刪除CMakeList.txt文件中的與Qt5相關的語句調試,發現,只有加入 target_link_libraries(${PROJECT_NAME}  Qt5::Widgets Qt5::Qml),__cplusplus就成爲201103,使用Qt5.6版本,沒有這個問題,5.8跟5.7同樣,有此問題。blog

Qt官網求答案,原來是這樣:ci

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:get

set(CMAKE_CXX_STANDARD 14)

在CMakeList.txt文件中加入這一句,問題得以解決。真是Qt5跟cmake聯合挖坑啊!

轉載於:https://my.oschina.net/lieefu/blog/812621

相關文章
相關標籤/搜索