makefile没有清理一切

时间:2013-09-05 05:22:44

标签: makefile

我试图找出为什么我的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文件。


免责声明: 这是作业,但这不是我正在评估的部分。我的问题出于纯粹的好奇心。

2 个答案:

答案 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(按此顺序尝试GNUmakefilemakefileMakefile。) -f Makefile通常不是必需的。

阅读documentation of GNU make

您应该clean一个.PHONY target,例如在clean:规则

之前添加
 .PHONY: clean

也可以使用remake,也可以remake -x(或您的remake -x clean}来调试Makefile

Makefile - s中的默认目标是第一个,在您的情况下all(也应标记为.PHONY BTW)也是如此。要清理,请运行make clean