Могу ли я использовать C ++ 11 с Xcode?

86

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

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

Villintehaspam
источник
Посмотрите ответы здесь и там .
F'x 01
Для более положительного результата посмотрите: stackoverflow.com/questions/837992/update-gcc-on-osx
Дэвид Родригес - dribeas 01
Что касается Clang: я считаю, что недавно он достиг разумной поддержки C ++ 03, но C ++ 0x все еще далека. Например, поддержка вариативного шаблона находится в стадии разработки, а ссылки на семантику перемещения / rvalue еще не реализованы.
Matthieu M.
У меня шаблоны с переменными параметрами работают с clang.
Александр Хамес

Ответы:

76

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

  1. На экране настроек сборки проекта включите опцию «Все».

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

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

Известно, что std :: move (), конструктор перемещения и ссылка R-Value работают должным образом, и я тестирую std :: thread и std :: atomic.

RichardLiu
источник
2
@ RichardLiu, а как насчет GNU++0Xварианта C++ Language Dialectи libstdc++варианта C++ Standard Library? Когда их использовать?
Tin
Я заглянул, /Developer/About\ Xcode.pdfи да, там написано, что C ++ 11 поддерживается, но когда я использую, -std=gnu++0xон выплевывает cc1plus: error: unrecognized command line option "-std=0x++"! Должен ли я использовать clang++вместо этого?
errordeveloper 04
@errordeveloper, до сих пор я только успешно скомпилировал C ++ 11 В Xcode IDE. Я не знаю, как включить C ++ 11 в командной строке или в make-файле. Сожалею.
RichardLiu
1
@RichardLiu: XCode обычно используется clang++при компиляции, а не g++поэтому поддержка C ++ 11 не работает при попытке использования g++из командной строки (потому что древний g++XCode не поддерживает его). Просто к вашему сведению.
Cornstalks
9

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

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

======= Исходный ответ от января 2011 г .: =======

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

clang многообещающий, но не особо стабильный и не имеющий особенностей по сравнению с функциями C ++ 0x. c ++ все еще очень нов для clang.

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

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

Джастин
источник
1

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

Барри Уорк
источник
2
Верно, но поддержка GCC останавливается на отметке 4,2, которая начинает давить на зуб
Маттиа
0

Я обнаружил, что auto, decltype (), range based "for (:)" работают в кроссплатформенном проекте (LLVM для MacOSX, iOS, gcc / linux, MSVC 10 / windows).

К сожалению, лямбды и макросы с переменным числом аргументов не работают в LLVM.

кентавр
источник
1
MSVC 10 и 11 не поддерживают для. Clang, с другой стороны, это поддерживает VARIADIC шаблоны просто отлично.
Alex B