簡體   English   中英

makefile不能清除所有內容

[英]makefile not cleaning up everything

我試圖弄清楚為什么我的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文件。


免責聲明: 這是家庭作業,但這不是我正在評估的部分。 我的問題是出於好奇。

如果make使用make -f Makefile調用make那么您將不會調用clean目標,您將調用第一個( all )目標。

嘗試:

$ make clean

也許一個clean文件已經存在。 ls -l clean檢查,然后在終端中執行rm -v clean

另外,請使用/bin/ls -l -s *.o檢查此類文件的所有權。 如果在某些時候你做了sudo make他們可能根本國有因此無法rm你的普通用戶。

順便說一句, make 如果有一個 makefile ,它將使用一個Makefile (它將按該順序嘗試GNUmakefilemakefileMakefile )。因此, -f Makefile通常不是必需的。

閱讀GNU make文檔

您應該clean .PHONY目標 ,例如,在clean:規則之前添加

 .PHONY: clean

也可以使用remake ,也許以remake -x (或在您的情況下為remake -x clean )調試您的Makefile

Makefile -s中的默認目標是第一個目標, all (也應標記為.PHONY BTW)在您的情況下。 要清潔,請運行make clean

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM