Mit Clang++ in der Datei Makefile anstelle von G++
Habe ich ein makefile, das baut mein Projekt schon mit 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
Wenn ich die erste Zeile zu GXX = clang++ -std=c++0x
clang wirft einige ziemlich dichten Fehler über iostream nicht finden, die richtigen Argumente oder etwas zusammen mit vielen anderen Fehler nach, dass (aber das ist der "root" - Fehler).
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)>
Ist das ein problem mit meinem makefile, oder könnte es wirklich einen Unterschied in dieser einfachen Zusammenstellung?
Mit clang 2.9.
Hinweis: die Zeile, Die die klappern beschwert sich über ist #include <iostream>
- Ich bin kein C++ Experte, aber dieser Seite scheint zu zeigen, dass clang 2.9 nicht zu 100% bereit für den c++0x - vielleicht ist das auch Teil des Problems?
- Seine nicht abstürzt, auf eine c++0x Frage, ist es krachend auf, darunter iostream denke ich
- Die Pfade in der Fehlermeldung so Aussehen, wie Sie immer g++ - 4.6-header-Dateien, sondern als klammerten sich die header-Dateien. Der g++ - header-Dateien sind in der Regel mit gcc-spezifischen Erweiterungen und Sachen, die wahrscheinlich nicht funktionieren mit clang.
- Wie behebe ich das?
- Fügen Sie die Option-v zu erhalten, clang zu drucken Sie alle die Argumente, die es verwendet. Dann können Sie diese Befehle manuell und ändern Sie die Optionen, um zu sehen, ob Sie einzelne übersetzungseinheiten zu bauen, und wenn ja, dann ändern Sie das makefile verwenden Sie die Einstellungen, die Sie entdecken.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine alte Frage, aber falls sonst jemand stolpert hier, eine Sache zu prüfen ist, ob Sie die schrillen std lib. Dafür brauchen Sie die fahne:
Wenn Sie auf OS X Lion (10.7) oder Mountain Lion (10.8), verwenden Sie 'c++' (/usr/bin/c++) anstatt 'clang++' direkt. Auch wenn man einen symlink auf die andere, clang hat einige smarts zum einrichten des korrekten Pfade und compiler-Optionen, mehr zu tun, was Sie erwarten, wenn Sie mit c++.