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

时间:2016-07-18 09:28:26

标签: qt g++ mingw qt5 qmake

我正在使用mingw32和g ++在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 +很多东西< / p>

另外,以下代码:

    #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? 谢谢

3 个答案:

答案 0 :(得分:1)

在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 :(得分:1)

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

答案 2 :(得分:0)

我通过在qt的下载存储库下载另一个版本的mingw找到了一种解决方法:here