À l'aide de Clang++ dans le Makefile à la place de G++

J'ai un makefile qui construit mon projet bien avec g++ 4.6.

#specify the compiler  
GXX=g++ -std=c++0x

# Specifiy the target  
all: linkedList

# Specify the object files that the target depends on  
# Also specify the object files needed to create the executable  
linkedList: StudentRecord.o Node.o LinkedList.o  ListMain.o
    $(GXX) StudentRecord.o Node.o LinkedList.o  ListMain.o -o linkedList

# Specify how the object files should be created from source files  
LinkedList.o: LinkedList.cpp
    $(GXX)  -c  LinkedList.cpp

ListMain.o: ListMain.cpp
    $(GXX)  -c  ListMain.cpp

StudentRecord.o: StudentRecord.cpp
    $(GXX)  -c  StudentRecord.cpp

Node.o: Node.cpp
    $(GXX)  -c  Node.cpp

Quand j'ai changer la première ligne GXX = clang++ -std=c++0x clang en jette plutôt dense erreur sur iostream pas à trouver le bon args ou quelque chose le long avec de nombreuses autres erreurs après cela (mais c'est la "racine" d'erreur).

In file included from /usr/include/c++/4.6/iostream:39:
In file included from /usr/include/c++/4.6/ostream:39:
In file included from /usr/include/c++/4.6/ios:40:
In file included from /usr/include/c++/4.6/bits/char_traits.h:40:
In file included from /usr/include/c++/4.6/bits/stl_algobase.h:65:
In file included from /usr/include/c++/4.6/bits/stl_pair.h:60:
In file included from /usr/include/c++/4.6/bits/move.h:53:
/usr/include/c++/4.6/type_traits:630:59: error: '_Tp' does not refer to a value
    : public integral_constant<bool, __is_standard_layout(_Tp)>

Est-ce un problème avec mon makefile, ou se pourrait-il y être vraiment une différence dans ce simple compilation?

À l'aide de clang 2.9.

Remarque: La ligne qui clang est de se plaindre est #include <iostream>

Je ne suis pas un C++ expert, mais cette page semble indiquer que clang 2.9 n'est pas prêt à 100% pour c++0x - c'est peut-être une partie du problème?
Ses pas s'écraser sur un c++0x problème, c'est de s'écraser sur y compris iostream je pense
Les chemins de message d'erreur dirait que vous êtes l'obtention de g++4.6 fichiers d'en-tête plutôt que clang fichiers d'en-tête. Le g++ fichiers d'en-tête ont tendance à utiliser gcc et les extensions spécifiques des trucs qui ne sera probablement pas travailler avec clang.
Comment puis-je régler ce problème?
Ajouter le drapeau-v pour obtenir clang pour imprimer tous les arguments qu'il utilise. Ensuite, vous pouvez exécuter ces commandes manuellement et de modifier les options pour voir si vous pouvez obtenir les unités de traduction à construire, et dans l'affirmative, puis modifier le fichier makefile pour utiliser les paramètres de vous découvrir.

OriginalL'auteur soandos | 2012-03-16