2011-01-01 2 views
81

Я рассматриваю использование некоторых функций C++ 11 (например, auto) в некоторых кросс-платформенных проектах (Windows + Mac). В Windows Visual Studio поддерживает части предстоящего стандарта C++ 11, который позволил бы мне упростить части базы кода, поэтому, естественно, мне было бы интересно начать использовать эти функции.Могу ли я использовать C++ 11 с Xcode?

Но, насколько мне известно, текущая версия XCode (3.2.4 + GCC 4.2) вообще не поддерживает любые возможности C++ 11. Могу ли я обновить версию GCC или версию CLang? Или я должен просто кусать свой язык и ждать, пока Apple собирается упаковать новую версию в будущем?

+0

Посмотрите на ответы [здесь] (http://stackoverflow.com/questions/2946887) и [там] (http://stackoverflow.com/questions/3002395). –

+0

Для получения более положительного результата посмотрите: http://stackoverflow.com/questions/837992/update-gcc-on-osx –

+0

Отличная ссылка! –

ответ

71

Xcode 4.2 наконец-то добавлена ​​поддержка C++ 0x:

  1. В окне настроек проекта сборки, переключитесь на "Все" варианты.

  2. В разделе «Параметры сборки» установите компилятор в «Apple LLVM compiler 3.0».

  3. Прокрутите страницу вниз до раздела «Apple LLVM Compiler 3.0 - Language» и установите «Язык интерфейса C++» на «C++ 0X» и «Стандартная библиотека C++» на «libC++».

БППП :: ход(), переместите конструктор и R-значение ссылки, как известно, работает, как ожидалось, и я тестирую на станд :: нити и станд :: атомном.

+2

@ RichardLiu, как насчет опции 'GNU ++ 0X' для' C++ Language Dialect' и 'libstdC++ 'для' C++ Standard Library'? Когда они будут использоваться? – Tin

+0

Я посмотрел в '/ Developer/About \ Xcode.pdf' и да, он говорит, что поддерживается C++ 11, но когда я использую' -std = gnu ++ 0x', он выплевывает 'cc1plus: error : непризнанная опция командной строки "-std = 0x ++" '! Должен ли я использовать 'clang ++' вместо этого? – errordeveloper

+0

@errordeveloper, до сих пор я только успешно скомпилировал C++ 11 WITHIN Xcode IDE. Я не знаю, как включить C++ 11 в командной строке или makefile. Сожалею. – RichardLiu

1

Xcode использует компиляторы GCC или Clang C++. Любые функции, поддерживаемые этими компиляторами, - это честная игра. Страница совместимости с C++ для GCC - here, а страница совместимости Clang C++ - here.

+2

Правда, но поддержка GCC останавливается в 4.2, которая начинает немного затягиваться в зубе – Mattia

8

======= Обновление 2012: =======

Начать с Clang - Многие C++ 11 функции теперь доступны в Clang. Он включен в Xcode.

======= Оригинальный ответ с января 2011 года: ======= компилятор

Intel может быть самым чистым способом пойти в это время. http://software.intel.com/en-us/articles/intel-composer-xe/

clang's многообещающий, но не особенно стабильный или признанный wrt C++ 0x. C++ все еще очень новый для clang.

gcc: относительно зрелый, но вам придется писать и поддерживать свои плагины компилятора для xcode.

Вы также можете указать пользовательские сценарии, но это боль для поддержания ... если вы не изо всех сил и не создаете инструмент адаптера.

0

Я нашел auto, decltype(), основанный на диапазоне "для работы (:)" в проекте с кросс-платформой (LLVM для MacOSX, iOS, gcc/linux, MSVC 10/windows).

lambdas & variadic macros, похоже, не работает в LLVM, но, к сожалению.

+1

MSVC 10 и 11 не поддерживают диапазон на основе. Clang, с другой стороны, * делает * поддержку вариационных шаблонов просто отлично. –

Смежные вопросы