Небольшая заметка о том, как форсировать поддержку 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 изменяется.