2010-08-15 14 views
5

que estoy tratando de crear un archivo de maquillaje que compilar todos los .cpp archivos en el directorio test a .o archivos en el directorio obj. A continuación hay una versión abreviada de lo que estoy haciendo. El problema es que las llamadas realizadas para compilar en los archivos .o tienen el nombre correcto .o, pero todas están compilando el mismo archivo .cpp.fichero Make: compilar todos los archivos .cpp a .o archivos

gcc -c -o obj/foo.o test/foo.c 
gcc -c -o obj/bar.o test/foo.c 
gcc -c -o obj/baz.o test/foo.c 

¿Qué necesito para cambiar a que se compile el archivo correspondiente .cpp?

CPP_FILES := $(wildcard test/*.cpp) 
OBJ_FILES = $(patsubst test/%.cpp,obj/%.o,$(CPP_FILES)) 


obj/%.o: $(CPP_FILES) 
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o [email protected] $< 

executable : $(OBJ_FILES) foo.a 
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o [email protected] 

Thanks.

Respuesta

5

Debe coincidir con % para la regla de su plantilla. en este momento está diciendo que cada .o depende de cada archivo cpp. Y $< es el primero de ellos.

Reemplazar con:

obj/%.o : test/%.cpp 
+0

Gracias. Eso funcionó perfectamente. – Tom

Cuestiones relacionadas