2011-01-01 14 views
81

Sto considerando l'utilizzo di alcune funzionalità di C++ 11 (ad esempio auto) in alcuni progetti multipiattaforma (Windows + Mac). Su Windows, Visual Studio supporta parti del prossimo standard C++ 11 che mi permetterebbe di semplificare parti del codice base, quindi naturalmente sarei interessato a iniziare a utilizzare queste funzionalità.Posso usare C++ 11 con Xcode?

Ma per quanto ne so, l'attuale versione XCode (3.2.4 + GCC 4.2) non supporta affatto le funzionalità di C++ 11. Posso aggiornare la versione GCC o la versione CLang in qualche modo? O dovrei solo mordermi la lingua e aspettare che Apple confezioni una nuova versione in futuro?

+0

Guarda le risposte [qui] (http://stackoverflow.com/questions/2946887) e [lì] (http://stackoverflow.com/questions/3002395). –

+0

Per un risultato più positivo, guarda: http://stackoverflow.com/questions/837992/update-gcc-on-osx –

+0

Link eccellente! –

risposta

71

Xcode 4.2 aveva finalmente aggiunto il supporto per C++ 0X:

  1. Nella schermata delle impostazioni di progetto di build, interruttore su "Tutti" opzioni.

  2. Nella sezione "Opzioni di creazione", impostare il compilatore su "Apple LLVM compilatore 3.0".

  3. Scorri verso il basso fino alla sezione "Apple LLVM Compiler 3.0 - Language" e imposta "Dialogo in linguaggio C++" su "C++ 0X" e "Libreria standard C++" su "libC++".

Lo std :: Move(), spostare costruttore e R-valore di riferimento sono noti per funzionare come previsto, e sto testando sul std :: filo e std :: atomica.

+2

@ RichardLiu, cosa dire dell'opzione 'GNU ++ 0X' per il' Dialogo di linguaggio C++' e l'opzione 'libstdC++' per' Standard C++ Library'? Quando saranno usati? – Tin

+0

Ho dato un'occhiata a '/ Developer/About \ Xcode.pdf' e sì, dice che C++ 11 è supportato, ma quando uso' -std = gnu ++ 0x' sputa 'cc1plus: error : opzione della riga di comando non riconosciuta "-std = 0x ++" '! Dovrei usare 'clang ++' invece? – errordeveloper

+0

@errordeveloper, finora ho compilato con successo C++ 11 WITHIN Xcode IDE. Non so come abilitare C++ 11 in riga di comando o makefile. Scusate. – RichardLiu

1

Xcode utilizza i compilatori GCC o Clang C++. Qualsiasi funzione supportata da quei compilatori è un gioco leale. La pagina di compatibilità C++ di GCC è here e la pagina di compatibilità di Clang C++ è here.

+2

Vero, ma il supporto GCC si ferma a 4.2 che sta iniziando a ottenere un po 'di tempo nel dente – Mattia

8

Aggiornamento ======= 2012: =======

Inizia con Clang - Molte funzioni C++ 11 sono ora disponibili in Clang. È incluso con Xcode.

======= risposta originale dal gennaio 2011: ======= compilatore

di Intel può essere il modo più pulito per andare in questo momento. http://software.intel.com/en-us/articles/intel-composer-xe/

clang promettente, ma non particolarmente stabile o in primo piano wrt C++ 0x caratteristiche. C++ è ancora molto nuovo per clang.

gcc: relativamente maturo, ma è necessario scrivere e gestire i plug-in del compilatore per xcode.

è anche possibile specificare script personalizzati, ma è un problema da mantenere ... a meno che non si esaurisca tutto e si crei uno strumento adattatore.

0

Ho trovato auto, decltype(), intervallo basato "per (:)" lavoro in un progetto multipiattaforma (LLVM per MacOSX, iOS, gcc/linux, MSVC 10/windows).

lambdas & macro variadic non sembrano funzionare sotto LLVM ancora tristemente.

+1

MSVC 10 e 11 non supportano la gamma basata su. Clang, d'altra parte, * fa * supporta i modelli variadic bene. –