2012-03-16 18 views
5

Ho un makefile che crea il mio progetto con g ++ 4.6.Utilizzo di Clang ++ in Makefile al posto di G ++

#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 

Quando cambio la prima linea ad essere GXX = clang++ -std=c++0x clang getta qualche errore piuttosto densa di non iostream trovare le args corrette o qualcosa del genere insieme a molti altri errori dopo che (ma questo è l'errore "root").

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)> 

questo è un problema con il mio makefile, o è ci potrebbe essere davvero la differenza in questo semplice compilazione?

Uso clang 2.9.

Nota: La linea che clang si lamenta è #include <iostream>

+0

Io non sono un esperto di C++, ma [questa pagina] (http://clang.llvm.org/cxx_status.html) sembra indicare che clang 2.9 non è 100% pronto per C++ 0x - forse questo è parte del problema? –

+0

Non si blocca su un problema C++ 0x, si blocca su includendo iostream penso – soandos

+1

I percorsi nel messaggio di errore sembrano come se avessi i file di intestazione di g ++ 4.6 piuttosto che i file di intestazione di clang. I file di intestazione g ++ tendono ad usare estensioni specifiche di gcc e cose che probabilmente non funzioneranno con clang. –

risposta

0

Se siete su OS X Lion (10.7) o Mountain Lion (10.8), utilizzare 'C++' (/ usr/bin/C++) invece di usare 'clang ++' direttamente. Anche se uno è un link simbolico all'altro, clang ha alcune intelligenze per impostare i percorsi corretti e le opzioni del compilatore per fare di più ciò che ci si aspetterebbe quando si usa C++.

+0

Sono su Windows – soandos

1

Questa è una vecchia domanda, ma nel caso in cui qualcun altro inciampi qui, una cosa da verificare è se si sta utilizzando la lib di clang std. Per questo è necessario il flag:

-stdlib=libc++ 
+0

Come aggiungere questo a un Makefile? – javadba

Problemi correlati