2013-10-24 77 views
0
CXX=clang++ $(CXXFLAGS) 
CXXFLAGS=-O2 
OFILES=a.o b.o c.o 

.SUFFIXES: .o .cpp 

main: $(OFILES) 
    $(CXX) $(OFILES) 

clean: rm -f *.o *~ 

a.o: a.cpp a.h 
b.o: b.cpp b.h 
c.o: c.cpp 

.o文件未被刪除。當我嘗試在rm之前放置一個@echo時,它似乎也不會發生。有任何想法嗎?makefile未達到「乾淨」刪除.o文件

回答

2

因爲它是現在,在clean目標取決於的 「文件」 rm-f*.o*~。所以只有在這些「文件」被修改後才能運行。

clean: rm -f *.o *~ 

應該是線

clean: 
    rm -f *.o *~ 

寫makefile文件的常用方法是這樣的:

# Variables 
VARIABLE1=value1 
VARIABLE2=value2 
# etc... 

# Targets 
# The first target is the "default" target when `make` is invoked 
# without any specific target 
default: some_other_target 

# Other targets... 

在你的情況,如果你想在「默認」的目標是clean這時如果使用上面給出的模板,你讓default取決於clean目標:

default: clean 
+0

那麼我會如何刪除它們呢?當我做「make」時,a.o,b.o和c.o出現在目錄中。我正試圖擺脫這些。 – kayla

+0

@TidusSmith閱讀我的整個答案,它有解決方案。 –

+0

正在使用兩行應該使其工作? .o文件仍未被刪除。 – kayla

0

@Tidus史密斯。如果要在編譯後刪除對象,可以在$(CC)後添加rm命令。

main: $(OFILES) 
    $(CXX) $(OFILES) 
    rm -f *.o *~ 

這確保編譯完成後,所有.o文件和*〜文件都被刪除。