Как программировать С++ 11 Использование Qt5?
Я собираюсь запрограммировать кросс-платформенный проект с моим другом. Мы решили использовать Qt и gcc как нашу среду IDE и toolchain соответственно. Он работает в Linux, я работаю над Windows.
Однако gcc в Linux не обязательно gcc в Windows. Более конкретно, Qt в Windows устанавливает mingw с gcc 4.4, а мой друг имеет gcc 4.7. Поэтому я попытался получить более новую версию gcc для Windows.
Моя текущая версия Qt равна 5 и с помощью gcc 4.7 загружается и устанавливается с этого сайта: http://www.equation.com/servlet/equation.cmd?fa=fortran
Я установил его в C:\QtSDK\mingw и просто переопределив все файлы, существующие из установки Qt. Я подумал, что мне не придется переконфигурировать что-либо в Qt, если я просто восполню короткий маршрут.
Однако, даже используя флаги компилятора:
QMAKE_CXXFLAGS += -std=c++0x (Qt 4.7)
и
CONFIG += c++11 (Qt5)
IDE или инструментальная цепочка не могут скомпилировать простой цикл для цикла:
int main(int argc, char *argv[])
{
int my_array[5] = {1, 2, 3, 4, 5};
for (auto x : my_array)
std::cout << x << std::endl;
return 0;
}
или списки инициализаторов:
int main(int argc, char *argv[])
{
QVector<int> testsData { 1, 2, 10, 42, 50, 123 };
QStringList options = { QLatin1String("foo"), QLatin1String("bar") };
return 0;
}
Однако, глядя на детали реализации gcc 4.7, обе эти функции и многое другое должны быть легко доступны.
Кто-нибудь еще пытался использовать gcc и Qt для Windows? Если да, то как вы его заработали? Я бы хотел, чтобы решение использовало gcc 4.6 или 4.7, но будет меньше, если это вообще невозможно.
В качестве альтернативы, есть ли среда для разработчиков для Linux и Windows, которая использует возможности С++ 11? Я бы тоже согласился на что-то помимо Qt, если он просто работает...
Я использовал источники:
С++ 0x в Qt (Qt 4.7-4.8)
С++ 11 в Qt5
Ответы
Ответ 1
QMAKE_CXXFLAGS += -std=c++0x
Результат ошибки, потому что вы не используете компилятор MinGW. "D9002: Игнорирование неизвестной опции -std=c++0x
" является ошибкой компилятора MSVC.
В QtCreator перейдите на вкладку проектов (слева) и измените используемую инструментальную цепочку. Если он не обнаружил автоматически MinGW, вам придется добавить его самостоятельно, нажав кнопку управления.
Ответ 2
UPDATE:
По этой ссылке: https://wiki.qt.io/How_to_use_C%2B%2B11_in_your_Qt_Projects
Теперь можно просто сделать это:
CONFIG += c++11
или
CONFIG += c++14
Кроме того, по-прежнему компилятор Qt 5.7 WILL REQUIRE С++ 11 по умолчанию и откажется от поддержки более старого компилятора, отличного от С++ 11.
Предыдущее ОБНОВЛЕНИЕ:
Чтобы включить С++ 11 - требуется GCC 4.7 и более новая:
qmake:
QMAKE_CXXFLAGS += -std=c++11
qbs:
cpp.cxxLanguageVersion: "c++11"
Чтобы включить С++ 14 - требуется GCC 4.9 и более новая:
qmake:
QMAKE_CXXFLAGS += -std=c++14
qbs:
cpp.cxxLanguageVersion: "c++14"
ПРИМЕЧАНИЕ. Обратите внимание, что "С++ 11", "С++ 14" и т.д. чувствительны к регистру.
Устаревшая версия:
qbs:
cpp.cxxFlags: "-std=c++11"
cpp.cxxFlags: "-std=c++14"
Старая версия:
GCC 4.7 теперь рекомендуется для Qt5. С GCC 4.7 вы можете использовать QMAKE_CXXFLAGS + = -std = С++ 11
Изменить: С помощью GCC 4.9 теперь можно включить С++ 14, передав этот флаг: QMAKE_CXXFLAGS + = -std = c + 11