CONFIG += c++11(仍然)在Linux上不起作用

CONFIG += c++11 (still) doesn't work on Linux

本文关键字:Linux 不起作用 仍然 c++11 CONFIG      更新时间:2023-10-16

我已经阅读了有关该主题的几个讨论,有人说qmake <3.0不能正确支持该指令。我刚刚为 g++-64 重新安装了 Qt 5.9.1,但问题仍然存在。另外,我尝试过使用各种mkspecs/xxx/xxx.conf文件,但没有运气。

CONFIG += c++11添加到 .pro 并没有真正在 Makefile 中添加 CXX 标志 -std=c++11,因此会出现错误

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.

编译时。

我正在开发Linux x64(Ubuntu发行版(,最新版本的Qt库(5.9.1(。同样的项目在Windows上编译时没有错误,MSVC2015和MinGw。

如果我声明QMAKE_CXXFLAGS += -std=c++11而不是CONFIG += c++11,它可以工作,但建议使用前一个声明,因为 qmake 将通过 CONFIG 指令自动处理 CXX 标志。糟糕的是,看起来它没有这样做...

CONFIG += c++11

应该足够了,以便使用正确的标志调用编译器以启用 C++11 支持。

但是,从 5.7 开始,Qt 需要 C++11 支持,因此即使没有CONFIG += c++11,您也应该使用 C++11 支持调用编译器。

我认为对于您的编译器,qmake"认为"c ++ 11支持是默认行为,qmake不会添加-std=c++11标志。

如果你好奇,你可以检查mkspecs文件。正如@Swift提到的,您必须检查您的,因为它们可能已被更正。在我安装Qt的那些中,似乎一切都很好,就像我QMAKE_CXXFLAGS_CXX11 = -std=c++11 QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11一样mkspecs/common/g++-base.conf

如果我是对的,这意味着您可以通过尝试使用CONFIG += c++14(或CONFIG += c++1z(来绕过 qmake 行为。您也可以尝试CONFIG += strict_c++(或CONFIG -= strict_c++(,此选项将禁用(或启用(GNU扩展,从而强制qmake添加-std=c++11(以便g++不会使用隐式-std=gnu++11(。

CONFIG 变量用于配置 Qt 代码(标头,可能是元代码(,因此应该在其中添加 c++11 以支持 c++11。 编译器标志是一个单独的项目,根据编译器及其版本,可能需要或不需要,较新的 gcc 默认为 gnu 版本的标准(带有扩展(,例如 gcc 6.0 - 到 gnu++14。

我想通了。这是我的错(显然...

如前所述,我已经通过统一的安装程序脚本安装了最新版本的Qt(5.9.1(。尽管如此,我的QtCreator仍然默认使用带有Qt4(!!(的旧工具包,该工具包通过包管理器安装,该包管理器记得何时安装,因此它实际上使用的是不处理CONFIG指令的旧版本的qmake。强制 qtchooser 使用 qt5 不会修改所用工具包中的工具集(学到了一些东西!使用最后一个套件,一切都按预期工作。通过命令行使用 qmake,在将 qtchooser 设置为使用 qt5 后,也可以按预期工作;我只是没有寻找正确的制作文件(...

因此,我可以确认问题出在qmake版本上,正如其他线程中所述。