2010-08-15 99 views
5

我試圖創建一個make文件,它將編譯obj目錄中的test目錄中的所有.cpp文件到.o文件。以下是我正在做的一個刪節版本。問題是編譯爲.o文件的調用名稱有合適的.o,但它們都編譯相同的.cpp文件。Make file:將所有.cpp文件編譯爲.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 

什麼我需要改變,使其編制相應的.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] 

謝謝。

回答

5

您需要爲您的模板規則匹配%。目前你說每個.o都取決於每個 cpp文件。 $<是其中的第一個。

將其替換爲:

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

謝謝。這工作完美。 – Tom 2010-08-15 20:44:30

相關問題