将-std=gnu++11编译器标志添加到QMake

4

我正在使用mingw32和g++.4.9.3,在Windows上编译Qt5.7。执行configure.bat时,出现以下错误:

C:\qt-everywhere-opensource-src-5.7.0\configure.bat -prefix C:\Qt-5.7 -skip qttools -skip qtwebchannel -skip qtwebengine -skip qtcharts -skip qtdatavis3d -platform win32-g++

C:\qt-everywhere-opensource-src-5.7.0\qtbase/qmake/library/qmakebuiltins.cpp: 在成员函数'QByteArray QMakeEvaluator::getCommandOutput(const QString&) const'中: C:\qt-everywhere-opensource-src-5.7.0\qtbase/qmake/library/qmakebuiltins.cpp:419:94: 错误:'_popen'未在此范围内声明 + QLatin1String(" && ") + args).toLocal8Bit().constData(), "r")) {

导致错误的命令是:

g++ -c -o qmakebuiltins.o -std=c++11 -DUNICODE -ffunction-sections -g -IC:\qt-everywhere-opensource-src-5.7.0\qtbase/qmake + 大量信息

同时,以下代码也存在问题:

    #include <stdio.h>

int main( int argc, char ** argv )
{
     FILE * f = popen( argv[ 1 ], "r" );
     return 0;
}

编译错误:

使用 g++ -std=c++11 mytest.cpp -o mytest 无法编译

应该使用:

>g++ -std=gnu++11 mytest.cpp -o mytest

所以问题是如何将传递给g++的选项c++11修改为gnu++11?这个问题需要通过配置文件来解决。

谢谢

类似问题:https://dev59.com/I2sz5IYBdhLWcg3wVGEy - Marcus
3个回答

2

在Qt中添加编译器选项非常容易。只需在您的qmake文件中的某个位置添加以下几行即可。

# C++ Compiler flags: Gnu C++ Extensions
QMAKE_CXXFLAGS += -std=gnu++11

同样地,如果你想传递C编译器选项,请使用以下命令。

# C Compiler flags for qmake 
QMAKE_CFLAGS += -std=gnu99

_popen无法与c++11一起使用的原因是它作为GNU C++扩展实现,不在标准C++中。同样,VisualStudio也将_popen与C++标准库分开定义。


1
根据Qt的Wiki,使用当前版本的qmake,您还可以使用CONFIG += c++11

0

我在Qt的下载库这里找到了一个解决方法,通过下载另一个版本的mingw。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接