首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在构建qmake项目时使用C++14功能?

如何在构建qmake项目时使用C++14功能?
EN

Stack Overflow用户
提问于 2014-10-01 02:04:16
回答 4查看 28.8K关注 0票数 24

我目前正在我的Qt应用程序中使用C++11功能。但是,我想在我的应用程序中使用一些新的C++14特性。

要在Qt应用程序中启用C++11,只需在qmake项目文件中添加一行,即:

代码语言:javascript
复制
CONFIG += c++11

对于早期版本,请执行以下操作:

代码语言:javascript
复制
QMAKE_CXXFLAGS += -std=c++1y

我已经尝试过用C++14做同样的事情,但是不起作用。我修改了上面提到的qmake项目行,如下所示:

代码语言:javascript
复制
CONFIG += c++14

对于早期版本,请执行以下操作:

代码语言:javascript
复制
QMAKE_CXXFLAGS += -std=c++1y

在此之后,在尝试构建项目时,出现了许多以前不存在的编译错误。这个项目编译得很好,但是,如果我尝试使用任何C++14特性,就会得到一个编译错误。这是一个示例:

代码语言:javascript
复制
template<typename T>
constexpr T pi = T(3.1415926535897932385);

这是对应的错误:

代码语言:javascript
复制
main.cpp:7: error: template declaration of 'constexpr const T pi'
constexpr T pi = T(3.1415926535897932385);  
          ^

在QtCreator中使用qmake工程时,如何开启C++14功能?

我使用的是Qt 5.3.2、Qt Creator 3.2.1和MinGW 4.8.2 32位。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-10-01 02:09:19

Qt创建器只是一个IDE

您可以将IDE视为“更智能的文本编辑器”,它可以帮助开发人员进行调试、构建、代码完成、文件管理等工作。

IDE在编译期间是无关紧要的。

重要的是你的编译器,,它独立于你的集成开发环境。

g++ 4.8.x不支持许多C++14功能:check out this page to learn what C++14 features are supported

票数 9
EN

Stack Overflow用户

发布于 2014-12-13 20:39:54

This is now supported properly from Qt 5.4。您只需在您的qmake项目文件中键入以下内容:

代码语言:javascript
复制
CONFIG += c++14

Thiago在2014年中进行了必要的代码更改:

Add support for CONFIG += c++14

我刚刚创建了必要的文档更改:

Mention the c++14 CONFIG option in the qmake variable reference

请注意,变量模板只支持从gcc 5.0,但然后您的代码就可以正常工作。这可以用来和老的gcc一起测试C++14:

main.cpp

代码语言:javascript
复制
#include <iostream>

int main()
{
    // Binary literals: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472.pdf
    // Single-quotation-mark as a digit separator: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf
    std::cout << 0b0001'0000'0001;
    return 0;
}

main.pro

代码语言:javascript
复制
TEMPLATE = app
TARGET = main
CONFIG -= qt
CONFIG += c++14
SOURCES += main.cpp

构建并运行

代码语言:javascript
复制
qmake && make && ./main

输出

代码语言:javascript
复制
257
票数 32
EN

Stack Overflow用户

发布于 2016-04-22 16:30:31

出于某种奇怪的原因,这就是Qt所做的事情:如果编译器是gcc或mingw,则CONFIG+=C++14会被转换为编译器标志-std=c++14 (这正是您所期望的)。

如果它是另一个编译器(比如clang),CONFIG=C++14会愚蠢地转换成-std=c++11 (原文如此!),所以即使你的clang版本正确地支持C++14,你也会得到关于不支持特性的错误。

要修复此问题,请显式指定该标志:

代码语言:javascript
复制
QMAKE_CXXFLAGS += -std=c++14

这样,您就可以确定您的编译器(g++、mingw或clang)将接收到正确的标志。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26127217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档