Hatred's Log Place

DON'T PANIC!

May 22, 2014 - 2 minute read - programming c++

Qt Creator и C++11

Небольшая заметка о том, как форсировать поддержку C++11 в парсере для различных билд-систем. Заметки касаются master-снапшота QTC (брать тут: http://download.qt-project.org/snapshots/qtcreator/master/latest/ или собирать из исходников).

Нужно отметить, что синтаксис нового стандарта поддерживается сейчас по-умолчанию. Проблемы касаются правильного определения констант компилятора, подключения частей стандартной библиотеки и т.п.

QMake

Система сборки по умолчанию.

Нужно добавить следующий параметр в .pro файл:

QMAKE_CXX_FLAGS += -std=c++11

после чего проект переконфигурируется, а на вкладке “Project Parts” в Tools -> C++ -> Check Code Model C++… вы увидите:

CXXVersion = CXX11

А параметр __cplusplus в Toolchain defines будет определён в 201103L

UPD, в рассылке Qt Creator подсказали, что для QMake достаточно передавать:

CONFIG+=c++11

CMake

Нужно добавить следующий параметр в CMakeLists.txt:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

Generic Project Manager

Использует пользовательские определения для отстройки кода. Лично я использую этот режим для различных embedded приложений (на работе) у которых свои, самобытные системы сборки (правда там нет и C++11, но C++11 проект на Makefile’ах мне недавно попался)

Заявлено, что по умолчанию уже включена CXX11, Check Code Model говорит о том же, но на деле не видит mutex, this_thread и т.п. даже при подключенных хидерах.

Основная причина, что в предопределённых дефайнах видим такое:

#define __cplusplus 199711L

а должно быть не менее 201103L.

Как хак можно использовать следующий дефайн в .config файле:

#define __cplusplus 201103L

в Toolchain defines это не отразится, но парсится включаемые файлы станут корректно.

UPD: найден баг, описывающий данную проблему: https://bugreports.qt-project.org/browse/QTCREATORBUG-10404, баг закрыт без решения, но там предложен ещё один workaround, через отдельный тулчейн с предопределённым -std=c++11

Autotools Project Manager

FIXME Не пользовался, ничего не могу сказать.

QBS

Взято отсюда: http://www.linux.org.ru/forum/development/9645878?cid=9648329

cpp.cxxFlags:
[
     ...
     "-std=c++11",
     ...
]

Проверил, действительно значение дефайна __cplusplus в Toolchain defines изменяется.

Tags: c++ c++11 programming qtcreator

std::begin() и std::end() Const correctness

comments powered by Disqus