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

Проверено:

Нашел решение, но может принять его только через некоторое время: https://stackoverflow.com/a/19530028/356726

20

Решение

Хорошо, благодаря вашим подсказкам я понял это.

После того, как я попробовал любой возможный совет сверху, но все еще безуспешно, я исключил любой подпроект, который мог придумать в моем проекте. В конце концов я нашел образец .pro QML, который не имел CONFIG += c++11 определены.

Это было причиной ошибки. Так что основной причиной был не проект, над которым я работал, а подпроект, который, однако, был скомпилирован на том же этапе.

10

Другие решения

Попробуйте изменить 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, как вы упомянули в комментарии.

9

Я использую Qt Creator 2.7.2, и у меня есть эта строка в моем файле .pro:

QMAKE_CXXFLAGS += -std=c++11

Это работает для вас?

6

qmake будет использовать любые флаги для c ++ 11. Таким образом, вы можете переписать их как:

unix: QMAKE_CXXFLAGS_CXX11 = -std = c ++ 11

CONFIG * = c ++ 11

Вы даже можете сказать ему использовать -std = c ++ 14 или -std = c ++ 17 вместо этого, когда c ++ 11 добавлен в конфигурацию, так как старые qmake могут не знать о них.

1
По вопросам рекламы [email protected]