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.

  1. Удалили все, запусти qmake и т.д., с нуля, без результата
  2. Как уже говорилось, с VS2010 это работает
  3. Используя MinGW с gcc 4.8.0 отсюда. http://qt-project.org/downloads
  4. Если это имеет значение, Win7 32

Проверено:

Нашел решение, но может принять его только через некоторое время: /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 могут не знать о них.

Другие вопросы по тегам