我试图找出为什么我的makefile会留下所有* .o文件。 clean:
部分显然有:
rm *.o *.s *.bc fib fact1 fact2 *~
我已经尝试将-f和其他几个参数添加到rm而没有任何运气。什么会导致这些不被删除?这是完整的makefile。我叫它
make -f Makefile
OFILES= fib.o
OFILES1= fact1.o
OFILES2= fact2.o
CPATH=~/cse/llvm/bin/
LLVMASY=$(CPATH)llvm-as
LLVMOPT=$(CPATH)opt
LLVMLC=$(CPATH)llc
AS=clang -c
LD=clang
all: fib fact1 fact2
fib: $(OFILES)
$(LD) $(OFILES) $(LIBS) -o $@
fact1: $(OFILES1)
$(LD) $(OFILES1) $(LIBS) -o $@
fact2: $(OFILES2)
$(LD) $(OFILES2) $(LIBS) -o $@
%.o : %.s
$(AS) $< -o $@
%.s : %.bc
$(LLVMLC) $< -O=3 -tailcallopt -o $@
%.bc : %.llvm
$(LLVMASY) $< -o $@
clean:
rm *.o *.s *.bc fib fact1 fact2 *~
编辑:我应该已经添加了所有* .s和* .bc文件成功删除。它只剩下* .o文件。
免责声明: 这是作业,但这不是我正在评估的部分。我的问题出于纯粹的好奇心。
答案 0 :(得分:4)
如果您使用make
调用make -f Makefile
,那么您不会调用clean
目标,您将调用第一个(all
)目标。
尝试:
$ make clean
答案 1 :(得分:0)
也许clean
文件已经存在。请查看ls -l clean
,然后在您的终端中执行rm -v clean
。
另外,请使用/bin/ls -l -s *.o
检查此类文件的所有权。如果您在某个时候执行了sudo make
,则他们可能是root用户,因此普通用户不能rm
。
BTW,make
将使用Makefile
if it has one(按此顺序尝试GNUmakefile
,makefile
和Makefile
。) -f Makefile
通常不是必需的。
您应该clean
一个.PHONY
target,例如在clean:
规则
.PHONY: clean
也可以使用remake,也可以remake -x
(或您的remake -x clean
}来调试Makefile
Makefile
- s中的默认目标是第一个,在您的情况下all
(也应标记为.PHONY
BTW)也是如此。要清理,请运行make clean
。