0

我试图弄清楚为什么我的 makefile 会留下所有 *.o 文件。该clean:部分显然具有:

rm *.o *.s *.bc fib fact1 fact2 *~

我尝试将 -f 和其他几个参数添加到 rm ,但没有任何运气。什么会导致这些不被删除?这是完整的生成文件。我称之为

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 文件保留。


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

4

2 回答 2

4

如果您正在调用makeusingmake -f Makefile那么您不是在调用clean目标,您将调用第一个 ( all) 目标。

尝试:

$ make clean
于 2013-09-05T05:44:21.440 回答
0

也许一个clean文件已经存在。ls -l clean然后rm -v clean在您的终端中检查。

此外,请检查/bin/ls -l -s *.o此类文件的所有权。如果在某个时候你做了一个sudo make,它们可能是 root 拥有的,所以你的普通用户不能拥有rm

顺便说一句,如果它有一个make,将使用 a (它尝试,并按此顺序)。所以通常不需要。Makefile GNUmakefilemakefileMakefile-f Makefile

阅读GNU make 的文档

你应该有clean一个.PHONY目标,例如在你的clean:规则之前添加

 .PHONY: clean

也使用remake,也许作为remake -x(或remake -x clean在你的情况下)来调试你的Makefile

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

于 2013-09-05T05:25:21.070 回答