Qt:CONFIG + = C ++ 11,但-std = c ++ 0x

时间:2013-10-22 16:29:41

标签: c++ c++11 mingw qt-creator qt5.1

当我使用VS 2010在 Qt Creator 2.8 / Qt5.1 下编译项目时,一切都很好。如果我对MinGW做同样的事情,我会收到以下错误。

 error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

我知道我需要启用C + 11,但我的.pro文件中有CONFIG += console c++11。这不是需要的吗? 我做错了什么?

当我看到制作时,我看到了:

CXXFLAGS      = -pipe -fno-keep-inline-dllexport -g -std=c++0x

令人困惑,正如我在专业档案中所说的c ++ 11。

  1. 已删除所有内容,从头开始运行qmake等,无结果
  2. 如上所述,使用VS2010可以正常工作
  3. 从这里使用带有gcc 4.8.0的MinGW。 http://qt-project.org/downloads
  4. 如果这很重要,Win7 32
  5. 经过:

    找到解决方案,但只能在一段时间内接受:https://stackoverflow.com/a/19530028/356726

4 个答案:

答案 0 :(得分:10)

好的,多亏了你的提示我已经弄明白了。

在我从上面尝试过任何可能的建议后,仍然没有成功,我已经排除了我能在项目中想到的任何子项目。最后我找到了一个没有定义CONFIG += c++11的QML样本.pro。

这导致错误。因此,根本原因不是我正在研究的项目,而是一个子项目,但是它在同一步骤中被编译。

答案 1 :(得分:9)

尝试更改mkspecs/win32-g++/qmake.conf行:

QMAKE_CXXFLAGS_CXX11    = -std=c++0x

为:

QMAKE_CXXFLAGS_CXX11    = -std=c++11

并重新运行qmake。


其他一些细节:

将“c ++ 11”功能添加到CONFIG qmake变量会导致mkspecs/features/c++11.prf文件被拉入(请参阅qmake Advanced Usage的“添加新配置功能”部分文件详情)。

qmake配置文件在配置C ++ 11支持的其他内容中有QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_CXX11行。所以在CONFIG变量中添加“c ++ 11”是表明你想要qmake支持c ++ 11的正确方法,正如你在评论中提到的那样。

答案 2 :(得分:6)

我正在使用Qt Creator 2.7.2,我的.pro文件中有这一行:

QMAKE_CXXFLAGS += -std=c++11

这对你有用吗?

答案 3 :(得分:1)

qmake将使用c ++ 11中的任何标志。所以你可以像:

一样覆盖它们

unix:QMAKE_CXXFLAGS_CXX11 = -std = c ++ 11

CONFIG * = c ++ 11

你甚至可以告诉它使用-std = c ++ 14或-std = c ++ 17而不是将c ++ 11添加到配置中,因为较旧的qmake可能不知道它们。