2010-08-15 6 views
5

Ich versuche, eine Make-Datei zu erstellen, die alle .cpp Dateien im test Verzeichnis .o Dateien im Verzeichnis obj kompilieren. Unten ist eine gekürzte Version dessen, was ich mache. Das Problem ist, dass die Aufrufe, die an die .o Dateien kompiliert werden, den richtigen .o-Namen haben, aber sie alle kompilieren die gleiche .cpp-Datei.Make-Datei: alle CPP-Dateien kompilieren Dateien .o

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 

Was muss ich ändern müssen, um den entsprechenden .cpp Datei zu machen zu kompilieren?

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] 

Danke.

Antwort

5

Sie müssen % für Ihre Vorlagenregel übereinstimmen. im Moment sagen Sie, dass jeder .o auf jede CPP-Datei abhängt. Und $< ist der erste von ihnen.

Ersetzen Sie es mit:

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

Danke. Das hat perfekt funktioniert. – Tom

Verwandte Themen