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时,似乎也不会发生这种情况。有什么想法吗?
答案 0 :(得分:2)
就像现在一样,clean
目标取决于“rm
,-f
,*.o
和{{1} }。因此,只有在修改了这些“文件”后才会运行。
该行
*~
应该是两个行
clean: rm -f *.o *~
编写makefile的常用方法是这样的:
clean:
rm -f *.o *~
在您的情况下,如果您希望“默认”目标为# 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
答案 1 :(得分:1)
@Tidus Smith。如果要在编译后删除对象,可以在$(CC)之后添加rm命令。
main: $(OFILES)
$(CXX) $(OFILES)
rm -f *.o *~
这确保在编译完成后,将删除所有.o文件和*〜文件。