2014-01-24 67 views
1

我想創建一個makefile我的項目,但在運行它,我得到一個錯誤 像:Makefile的循環依賴下降

make: Circular database.cpp <- database.cpp dependency dropped

make: database.cpp' is up to date.

這裏是我的Makefile:

HEADERFILES = $(wildcard *.h) 
CPPFILES = $(wildcard *.cpp) 
OBJFILES = $(patsubst %.cpp ,%.o ,$(wildcard *.cpp)) 
$(OBJFILES): $(CPPFILES) $(HEADERFILES) 
    g++ -c -o $(OBJFILES) $(CPPFILES) 
    ar rvs libdatabase.a $(OBJFILES) 

我只有一個.cpp.h文件。請有人糾正它。

回答

3

您的patsubst中有一個額外的空間阻止了正確的匹配,因此OBJFILES是「database.cpp」。您可以改正它,像這樣:

OBJFILES = $(patsubst %.cpp,%.o ,$(wildcard *.cpp)) 

但是,這仍然給你留下一個makefile,當你添加第二個源文件代碼庫,這將根本無法運行。我建議你這樣說:

$(OBJFILES): %.o : %.cpp $(HEADERFILES) 
    g++ -c -o [email protected] $< 
    ar rvs libdatabase.a [email protected] 
+0

@MadScientist實際上ü修改我的命令$(CPPFILES) - >%的.o:%的.cpp什麼%的.o:%CPP裝置可以ü請解釋一下小有一點位。明確什麼%會做 – Jeggu

+0

Beta實際上回答這個問題不是我。學習的最佳方式是閱讀文檔,而不是在StackOverflow上詢問。 Beta正在使用的表格是調用_static模式rule_。 GNU make手冊中描述它們的部分是http://www.gnu.org/software/make/manual/html_node/Static-Pattern.html – MadScientist