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 时,似乎也不会发生这种情况。有任何想法吗?

4

2 回答 2

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
于 2013-10-24T06:05:45.683 回答
1

@Tidus 史密斯。如果要在编译后删除对象,可以在 $(CC) 之后添加 rm 命令。

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

这确保在编译完成后所有 .o 文件和 *~ 文件都被删除。

于 2013-10-24T06:39:07.760 回答