Добавление флага -std=gnu++11 в QMake
Я собираю qt5.7 на окнах с mingw32 и g++.4.9.3. При выполнении 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 -where-opensource-src-5.7.0\qtbase/qmake/library/qmakebuiltins.cpp: в функции-члене 'QByteArray QMakeEvaluator::getCommandOutput(const QString&) const': C:\qt-where-opensource-src-5.7.0\qtbase/qmake/library/qmakebuiltins.cpp:419:94: ошибка: '_popen' не было объявлено в этой области + QLatin1String(" && ") + args).toLocal8Bit().constData(), "р")) {
Команда, которая приводит к этой ошибке:
g ++ -c -o qmakebuiltins.o -std = C++11 -DUNICODE -функция-разделы -g -IC:\qt-везде-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
Таким образом, вопрос в том, как я могу изменить опцию C++ 11 для gnu ++ 11, которая передается в g ++ файлом конфигурации? Спасибо
3 ответа
Добавление опций компилятора довольно просто в 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++.
Согласно вики Qt, с текущей версией qmake, которую вы используете, вы также можете использовать CONFIG += c++11
,
Я нашел обходной путь, загрузив другую версию mingw в хранилище загрузок qt: здесь