À 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.
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
Vous devez vous connecter pour publier un commentaire.
C'est une vieille question, mais dans le cas de toute autre personne trébuche ici, une seule chose à vérifier est de savoir si vous êtes en utilisant le cliquetis std lib. Pour cela vous avez besoin du drapeau:
OriginalL'auteur Rob Lachlan
Si vous êtes sur OS X Lion (10.7) ou Mountain Lion (10.8), utilisez 'c++' (/usr/bin/c++) au lieu d'utiliser 'clang++" directement. Même si l'on est un lien symbolique vers l'autre, clang a quelques smarts pour configurer les chemins et les options du compilateur de faire plus de ce que vous attendez lors de l'utilisation de c++.
OriginalL'auteur mvl