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

0

ファイルcleanが既に存在する可能性があります。確認してls -l cleanから、おそらくrm -v clean端末で実行してください。

また、/bin/ls -l -s *.oそのようなファイルの所有権を確認してください。ある時点で実行した場合、それらはルート所有である可能性があるため、通常のユーザーsudo makeではできません。rm

ところで、 a がある場合はmakea を使用します( 、をその順序 で試行します) ため、多くの場合、 は必要ありません。Makefile GNUmakefilemakefileMakefile-f Makefile

GNU makeのドキュメントを読んでください。

ターゲットが必要ですclean。たとえば、ルールの前に追加します.PHONYclean:

 .PHONY: clean

remakeも使用して、おそらく as remake -x(またはremake -x cleanあなたの場合) をデバッグしますMakefile

Makefile-sのデフォルトのターゲットは最初のものなので、あなたの場合はそうです(BTWallとマークする必要があります)。.PHONYクリーニングするには、 を実行しmake cleanます。

于 2013-09-05T05:25:21.070 に答える