【问题标题】:Qt: CONFIG += C++11, but -std=c++0xQt:配置 += C++11,但 -std=c++0x
【发布时间】:2013-10-31 15:36:49
【问题描述】:

当我使用 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

令人困惑,正如我在 pro 文件中所说的 c++11。

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

已检查:

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

【问题讨论】:

  • 是一样的,除了-std=c++0x 也适用于旧版本的编译器。
  • 谢谢。但是为什么当我使用 #include 时出现“必须使用 -std=c++11 启用”错误
  • 这确实很奇怪。
  • 您确定 gcc 4.8.0 正在被拾取(可能正在找到您机器上的其他发行版)。正如@R.MartinhoFernandes 所说,gcc 应该同样对待-std=c++0x-std=c++11。您可以尝试将-v 添加到CXXFLAGS 以获取有关正在使用的编译器和包含目录的详细信息。

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


【解决方案1】:

qmake 将使用 c++11 的任何标志。所以你可以像这样覆盖它们:

unix:QMAKE_CXXFLAGS_CXX11 = -std=c++11

配置 *= c++11

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

【讨论】:

    【解决方案2】:

    好的,感谢您的提示,我已经弄清楚了。

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

    这是导致错误的原因。所以根本原因不是我正在处理的项目,而是在同一步骤中编译的子项目。

    【讨论】:

      【解决方案3】:

      尝试更改 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 配置文件有一个 QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_CXX11 行以及其他配置 C++11 支持的内容。因此,正如您在评论中提到的那样,将“c++11”添加到 CONFIG 变量是表明您希望 c++11 支持 qmake 的正确方法。

      【讨论】:

      • 在 Ubuntu 14.04 下使用最新的 QtCreator,我仍然有同样的问题(尽管在 /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf)。我发现我必须编辑已安装的 conf 文件才能使其正常工作,这有点令人担忧。有没有办法让用户配置或 pro/pri 文件重新定义这个变量?
      • 我不知道 - 我对 qmake 的了解不够,不知道是否有用户可访问的机制来覆盖它。
      【解决方案4】:

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

      QMAKE_CXXFLAGS += -std=c++11
      

      这对你有用吗?

      【讨论】:

      • 我会给这个线索。在某处我读过不使用 QMAKE_CXXFLAGS 但 CONFIG += c++11 - 但我不记得了。一有结果就会更新。
      猜你喜欢
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      相关资源
      最近更新 更多