Posso usare C ++ 11 con Xcode?


86

Sto valutando l'utilizzo di alcune funzionalità C ++ 11 (come autoad esempio) in alcuni progetti multipiattaforma (Windows + Mac). Su Windows, Visual Studio supporta parti del prossimo standard C ++ 11 che mi consentirebbero di semplificare parti della base di codice, quindi naturalmente sarei interessato a iniziare a utilizzare queste funzionalità.

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


Guarda le risposte qua e .
F'x


Per quanto riguarda Clang: credo che recentemente abbia ottenuto un ragionevole supporto per C ++ 03, ma C ++ 0x è ancora un obiettivo lontano. Ad esempio, il supporto del modello variadico è in fase di elaborazione e lo spostamento dei riferimenti semantici / valore non è stato ancora implementato.
Matthieu M.

I modelli Variadic funzionano bene per me con clang.
Alexandre Hamez

Risposte:


76

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

  1. Nella schermata delle impostazioni di compilazione del progetto, attiva le opzioni "Tutte".

  2. Nella sezione "Opzioni di compilazione", imposta il compilatore su "Compilatore Apple LLVM 3.0".

  3. Scorri verso il basso fino alla sezione "Apple LLVM Compiler 3.0 - Lingua" e imposta "C ++ Language Dialect" su "C ++ 0X" e "C ++ Standard Library" su "libc ++".

È noto che std :: move (), costruttore di spostamento e riferimento al valore R funzionano come previsto e sto testando su std :: thread e std :: atomic.


2
@ RichardLiu, che dire GNU++0Xdell'opzione per C++ Language Dialecte libstdc++dell'opzione per C++ Standard Library? Quando devono essere utilizzati?
Tin

Ho dato un'occhiata /Developer/About\ Xcode.pdfe sì, dice che C ++ 11 è supportato, ma quando lo uso -std=gnu++0xsputa cc1plus: error: unrecognized command line option "-std=0x++"! Dovrei usare clang++invece?
errordeveloper

@errordeveloper, finora avevo compilato con successo solo C ++ 11 IN Xcode IDE. Non so come abilitare C ++ 11 nella riga di comando o nel makefile. Scusate.
RichardLiu

1
@RichardLiu: XCode normalmente usa clang++durante la compilazione, no g++, motivo per cui il supporto C ++ 11 fallisce quando si tenta di usarlo g++dalla riga di comando (perché l'antico g++XCode ti dà non lo supporta). Solo FYI.
Steli di mais

9

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

Inizia con Clang: molte funzionalità di C ++ 11 sono ora disponibili in Clang. È incluso con Xcode.

======= Risposta originale di gennaio 2011: =======

Il compilatore di Intel potrebbe essere il modo più pulito da percorrere in questo momento. http://software.intel.com/en-us/articles/intel-composer-xe/

le caratteristiche promettenti, ma non particolarmente stabili o caratterizzate da clang rispetto a c ++ 0x c ++ è ancora molto nuovo per clang.

gcc: relativamente maturo, ma dovrai scrivere e mantenere i plugin del compilatore per xcode.

puoi anche specificare script personalizzati, ma è una seccatura da mantenere ... a meno che tu non faccia di tutto e crei uno strumento adattatore.


1

Xcode utilizza i compilatori GCC o Clang C ++. Tutte le funzionalità supportate da questi compilatori sono un gioco leale. La pagina di compatibilità C ++ di GCC è qui e la pagina di compatibilità C ++ di Clang è qui .


2
Vero ma il supporto del GCC si ferma a 4.2 che inizia a diventare un po 'lungo nel dente
Mattia

0

Ho trovato auto, decltype (), range based "for (:)" funzionano in un progetto multipiattaforma (LLVM per MacOSX, iOS, gcc / linux, MSVC 10 / windows).

i lambda e le macro variadiche non sembrano funzionare ancora con LLVM purtroppo.


1
MSVC 10 e 11 non supportano basato su intervallo per. Clang, d'altra parte, non supporta i modelli variadic bene.
Alex B
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.