web-dev-qa-db-fra.com

Xcode 4.3 et C ++ 11 incluent des chemins

J'ai installé Xcode 4.3 et je veux tester ce programme C++ 11:

#include <type_traits>

int main()
{
}

Cependant, il ne trouve pas le type_traits entête:

~ $ c++ -o test main.cpp
main.cpp:1:10: fatal error: 'type_traits' file not found
#include <type_traits>
         ^
1 error generated.

Il semble que j'utilise le bon compilateur:

~ $ c++ -v
Apple clang version 3.1 (tags/Apple/clang-318.0.45) (based on LLVM 3.1svn)
Target: x86_64-Apple-darwin11.3.0
Thread model: posix

J'ai vérifié les chemins d'inclusion par défaut:

~ $ `c++ --print-prog-name=cc1plus` -v
ignoring nonexistent directory "/usr/include/c++/4.2.1/i686-Apple-darwin11"
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-Apple-darwin11/4.2.1/../../../../i686-Apple-darwin11/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/4.2.1
 /usr/include/c++/4.2.1/backward
 /usr/local/include
 /Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-Apple-darwin11/4.2.1/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.

Les chemins ci-dessus ne contiennent en effet pas le type_traits en-têtes. Une commande de recherche révèle que l'on peut trouver à deux endroits:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/usr/include/c++/v1/type_traits
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1/type_traits

Apparemment, quelque chose ne va pas avec mes valeurs par défaut du compilateur. Comment puis-je configurer mon compilateur pour qu'il trouve le type_traits en-tête au bon endroit?

Mettre à jour

Suite à la suggestion de @ sehe:

~ $ clang++ -v -fshow-source-location -std=c++0x main.cpp
Apple clang version 3.1 (tags/Apple/clang-318.0.45) (based on LLVM 3.1svn)
Target: x86_64-Apple-darwin11.3.0
Thread model: posix
 "/usr/bin/clang" -cc1 -triple x86_64-Apple-macosx10.7.3 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name main.cpp -pic-level 1 -mdisable-fp-elim -relaxed-aliasing -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 128.2 -v -resource-dir /usr/bin/../lib/clang/3.1 -fmodule-cache-path /var/folders/d6/sf96r2ps457230x3v8yj52s40000gp/T/clang-module-cache -std=c++0x -fdeprecated-macro -fdebug-compilation-dir /Users/francis -ferror-limit 19 -fmessage-length 174 -stack-protector 1 -fblocks -fobjc-runtime-has-arc -fobjc-runtime-has-weak -fobjc-dispatch-method=mixed -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/d6/sf96r2ps457230x3v8yj52s40000gp/T/main-sUcT7k.o -x c++ main.cpp
clang -cc1 version 3.1 based upon llvm 3.1svn default target x86_64-Apple-darwin11.3.0
ignoring nonexistent directory "/usr/include/c++/4.2.1/i686-Apple-darwin10/x86_64"
ignoring nonexistent directory "/usr/include/c++/4.0.0"
ignoring nonexistent directory "/usr/include/c++/4.0.0/i686-Apple-darwin8/"
ignoring nonexistent directory "/usr/include/c++/4.0.0/backward"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/4.2.1
 /usr/include/c++/4.2.1/backward
 /usr/local/include
 /usr/bin/../lib/clang/3.1/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.
main.cpp:1:10: fatal error: 'type_traits' file not found
#include <type_traits>
         ^
1 error generated.

Il ne semble pas du tout apparaître dans le bundle Xcode.app.

Une des raisons possibles est que j'ai installé à la fois Xcode et les "Outils de ligne de commande pour Xcode". Ce dernier a installé des binaires dans le /usr dossier.

Je viens de découvrir que le type_traits l'en-tête peut également être trouvé dans /usr/include:

~ $ find /usr/include -type f -name type_traits
/usr/include/c++/4.2.1/tr1/type_traits
/usr/include/c++/v1/type_traits
25
StackedCrooked

Vous avez besoin:

-std=c++0x

pour sélectionner C++ 11. Et vous avez besoin de:

-stdlib=libc++

pour sélectionner libc ++ . Par défaut, le std :: lib fourni avec gcc 4.2 est utilisé, qui est pré-C++ 11.

25
Howard Hinnant

La réponse d'Howard Hinnant (avec corrections) est la bonne réponse pour la ligne de commande.

Pour utiliser la nouvelle bibliothèque standard C++ 11 à l'intérieur de Xcode:

  • Dans l'onglet Paramètres de construction de votre projet, faites défiler vers le bas jusqu'à "Compilateur Apple LLVM 4.1 - Langue"
  • Définissez le paramètre "Dialecte du langage C++" sur "C++ 11 [-std = c ++ 11]"
  • Définissez le paramètre "C++ Standard Library" sur "libc ++ (LLVM standard C++ library with C++ 11 support)"
6
John Brewer