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 时,似乎也不会发生这种情况。有任何想法吗?
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 时,似乎也不会发生这种情况。有任何想法吗?
就像现在一样,目标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
@Tidus 史密斯。如果要在编译后删除对象,可以在 $(CC) 之后添加 rm 命令。
main: $(OFILES)
$(CXX) $(OFILES)
rm -f *.o *~
这确保在编译完成后所有 .o 文件和 *~ 文件都被删除。