Qt: CONFIG += C++11, но -std= C++0x
Когда я компилирую проект под Qt Creator 2.8 / Qt5.1 с VS 2010, все в порядке. Если я делаю то же самое с MinGW, я получаю следующую ошибку.
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.
Я понимаю, что мне нужно включить C+11, но у меня есть CONFIG += console c++11
в моем.pro файле. Разве это не то, что нужно? Что я делаю неправильно?
Когда я смотрю на марку, я вижу:
CXXFLAGS = -pipe -fno-keep-inline-dllexport -g -std=c++0x
Смущает, как я говорю с ++ 11 в файле Pro.
- Удалили все, запусти
qmake
и т.д., с нуля, без результата - Как уже говорилось, с VS2010 это работает
- Используя MinGW с gcc 4.8.0 отсюда. http://qt-project.org/downloads
- Если это имеет значение, Win7 32
Проверено:
- Нет ANSI: C++11 #include
выдает ошибку компиляции - std = c + 11 MinGW: функциональность C++11 с MinGW
Нашел решение, но может принять его только через некоторое время: /questions/10379646/qt-config-c11-no-std-c0x/10379657#10379657
4 ответа
Хорошо, благодаря вашим подсказкам я понял это.
После того, как я попробовал любой возможный совет сверху, но все еще безуспешно, я исключил любой подпроект, который мог придумать в моем проекте. В конце концов я нашел образец.pro QML, который не имел CONFIG += c++11
определены.
Это было причиной ошибки. Таким образом, основной причиной был не проект, над которым я работал, а подпроект, который, однако, был скомпилирован на том же этапе.
Попробуйте изменить mkspecs/win32-g++/qmake.conf
строка, которая говорит:
QMAKE_CXXFLAGS_CXX11 = -std=c++0x
чтобы:
QMAKE_CXXFLAGS_CXX11 = -std=c++11
и снова запустите qmake.
Некоторые дополнительные детали:
Добавление функции "C++11" в CONFIG
Переменная qmake вызывает mkspecs/features/c++11.prf
файл для извлечения (подробности см. в разделе "Добавление новых функций конфигурации" в документе " Расширенное использование qmake").
Этот профиль qmake имеет QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_CXX11
линия среди прочего, которые настраивают поддержку C++11. Таким образом, добавление "C++11" в переменную CONFIG - это правильный способ указать, что вы хотите поддержку C++11 для qmake, как вы упомянули в комментарии.
Я использую Qt Creator 2.7.2, и у меня есть эта строка в моем файле.pro:
QMAKE_CXXFLAGS += -std=c++11
Это работает для вас?
qmake будет использовать любые флаги для C++11. Таким образом, вы можете переписать их как:
unix: QMAKE_CXXFLAGS_CXX11 = -std= C++ 11
CONFIG * = C++ 11
Вы даже можете сказать ему использовать -std= C++14 или -std= C++17 вместо этого, когда C++ 11 добавлен в конфигурацию, так как старые qmake могут не знать о них.