66 votes

Comment compiler C ++ avec le support de C ++11 dans un terminal Mac

Je voulais compiler du C++11 du code source au sein de Mac Terminal, mais a échoué. J'ai essayé d' g++ -std=c++11, g++ -std=c++0x, g++ -std=gnu++11 et g++ -std=gnu++0x mais rien n'a fonctionné. Terminal de toujours lire unrecognized command line option. Toutefois, g++ -std=gnu et des choses comme ça a bien fonctionné (de cours C++11 du code source ne pouvait pas passer).

Quelle option dois-je utiliser pour activer C++11?

Par ailleurs, l'outil de ligne de commande que j'utilise est installé dans Xcode, et je suis sûr qu'ils sont à jour.

98voto

bames53 Points 38303

Comme d'autres l'ont fait remarquer que vous devez utiliser clang++ plutôt que d' g++. Aussi, vous devez utiliser la libc++ de la bibliothèque au lieu de la valeur par défaut libstdc++; La version proposée de libstdc++ est assez vieux et, par conséquent, ne comprennent pas le C++11 fonctions de la bibliothèque.

clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp

Si vous n'avez pas installé les outils de ligne de commande pour Xcode vous pouvez exécuter le compilateur et d'autres outils sans en faire qu'à l'aide de la xcrun outil.

xcrun clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp

Aussi, si il ya un avertissement particulier que vous souhaitez désactiver, vous pouvez passer des indicateurs supplémentaires pour le compilateur pour le faire. À la fin des messages d'avertissement, il vous montre les plus spécifiques drapeau, qui permettrait à l'avertissement. Pour désactiver cet avertissement que vous précédez no- à l'avertissement de nom.

Par exemple, vous ne voulez probablement pas le c++98 compatibilité des avertissements. À la fin de ces avertissements, il montre le drapeau -Wc++98-compat et pour les désactiver vous passez -Wno-c++98-compat.

25voto

Cornstalks Points 9261

XCode utilise clang et clang++ lors de la compilation, et non g++ (en supposant que vous n'ayez pas personnalisé quelque chose). Au lieu de cela, essayez:

 $ cat t.cpp
#include <iostream>

int main()
{
    int* p = nullptr;
    std::cout << p << std::endl;
}
$ clang++ -std=c++11 -stdlib=libc++ t.cpp
$ ./a.out 
0x0
 

Merci à la réponse de bames53 d’avoir indiqué que j’avais omis -stdlib=libc++ .

Si vous souhaitez utiliser certaines extensions GNU (et également utiliser C ++ 11), vous pouvez utiliser -std=gnu++11 au lieu de -std=c++11 , ce qui activera le mode C ++ 11 et conservera également Extensions GNU activées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X