CONFIG += c++11(仍然)在Linux上不起作用
CONFIG += c++11 (still) doesn't work on Linux
我已经阅读了有关该主题的几个讨论,有人说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版本上,正如其他线程中所述。
- 编译在我的 Mac 上工作,但在集群 (Linux) 上不起作用
- 在qt QFileDialog中设置后缀在linux中不起作用,如何解决?
- 文件写入在PHP扩展c / c ++(linux)中不起作用
- CONFIG += c++11(仍然)在Linux上不起作用
- Makefile在Linux中工作,但在Windows下不起作用,在子目录中找不到文件
- SQL Server 2017 C++ ODBC 连接在 Linux 上不起作用
- 在 Linux 中,recv() 有效,但 recvmsg() 不起作用
- 当我在Windows上运行它时,为什么我的Linux编译二进制不起作用
- 在Linux(Raspbian)中,OpenCV集(CV_CAP_PROP_FPS,60)不起作用
- ubuntu Linux 中的数组副本实际上不起作用
- 唯一的字符代码在 Linux 中运行时不起作用,但在 Windows (C++) 中很好
- 分段错误(核心转储) - 代码在 VS 中有效,但在 Linux 终端中不起作用
- std::thread在Linux Eclipse上不起作用
- 使用Iibjson尝试,catch在目标交叉编译的linux板中不起作用
- 在 Linux 中使用 C++ 列出目录的所有文件不起作用
- IPC_RMID在带有C++的linux上不起作用
- Linux中的转义字符不起作用
- 为什么我的读取矢量<矢量>的循环<string>不起作用?Linux C++
- 在 qt 中添加 += -std=c++11 QMAKE_CXXFLAGS 到 .pro 文件中不起作用(在 Linux
- Linux : pthread_cond_signal() 在 Signal Handler() 中不起作用