2012-03-16 7 views
5

Tengo un archivo MAKE que construye mi proyecto muy bien con g ++ 4.6.Usando Clang ++ en Makefile en lugar de 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 

Cuando cambio la primera línea para ser GXX = clang++ -std=c++0x sonido metálico lanza algún error bastante densa sobre iostream no encontrar los argumentos correctos o algo junto con muchos otros errores después de eso (pero esto es el error "raíz").

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

Es éste un problema con mi makefile, o es podría realmente haber una diferencia en este simple compilación?

Usando clang 2.9.

Nota: La línea que CLANG se queja es #include <iostream>

+0

No soy experto en C++, pero [esta página] (http://clang.llvm.org/cxx_status.html) parece indicar que clang 2.9 no es 100% listo para C++ 0x - ¿Tal vez eso sea parte del problema? –

+0

No está fallando en un problema de C++ 0x, se está bloqueando al incluir iostream Creo que – soandos

+1

Las rutas de acceso en el mensaje de error parecen que está obteniendo los archivos de encabezado de g ++ 4.6 en lugar de los archivos de encabezado de clang. Los archivos de encabezado g ++ tienden a usar extensiones específicas de gcc y cosas que probablemente no funcionarán con clang. –

Respuesta

0

Si estás en OS X Lion (10.7) o Mountain Lion (10.8), utiliza 'C++' (/ usr/bin/C++) en lugar de usar 'clang ++' directamente. A pesar de que uno es un enlace simbólico al otro, clang tiene algo de inteligencia para configurar las rutas correctas y las opciones del compilador para hacer más de lo que cabría esperar al usar C++.

+0

Estoy en Windows – soandos

1

Esta es una vieja pregunta, pero en caso de que alguien más se tropiece aquí, una cosa para comprobar es si está utilizando el clang std lib. Para eso se necesita la bandera:

-stdlib=libc++ 
+0

¿Cómo agregar esto a un Makefile? – javadba