簡體   English   中英

如何避免“沒有這樣的文件或目錄”錯誤的`make clean` Makefile目標

[英]How to avoid “No such file or directory” Error for `make clean` Makefile target

我有一個Makefile,它定義了.PHONY清理目標,用於清理.o文件和可執行文件,目標如下:

...
.PHONY : clean
clean:
    rm $(addprefix $(vq_DIR),$(vq_OBJS)) \
       $(addprefix $(vq_DIR),vq) \
       $(addprefix $(covq_DIR),$(covq_OBJS)) \
       $(addprefix $(covq_DIR),covq) \
       $(addprefix $(covq_2_DIR),$(covq_2_OBJS)) \
       $(addprefix $(covq_2_DIR),covq_2) \
       $(addprefix $(covq_2_DIR),$(test_OBJS)) \
       $(addprefix $(covq_2_DIR),test)

一切都按預期工作,但是當其中一些文件不存在時, rm會引發錯誤(沒有這樣的文件或目錄),並且輸出顯示Makefile目標失敗,當它明顯做我想要的時候。

是否有一種很好的方法可以告訴rm命令“刪除這些文件,如果它們存在,如果不存在就不要抱怨”? 我查了手冊頁的rm ,發現沒有這樣的標志。

編輯:我實際上沒有注意到聯機幫助頁中-f標志的描述,這是解決方案。

使用rm -f (甚至更好的$(RM) ,由內置的make規則提供,可以使用make -p )而不是rm在你的clean規則中找到。

rm -f

將FORCE並且不輸出任何錯誤

當目標失敗時

執行目標時,它會根據事件是否成功返回狀態 - 如果目標失敗,則make將不會執行任何依賴它的目標。 例如,在上面的示例中,如果“clean”失敗,則rebuild將不會執行“build”目標。 不幸的是,如果沒有要刪除的核心文件,可能會發生這種情況。 幸運的是,通過在命令前面加一個減號,可以很容易地解決這個問題,其狀態應該被忽略:

 clean: -rm -f *.o core 

~ http://www.cprogramming.com/tutorial/makefiles.html

我放棄了rm。 以下命令將刪除文件和目錄。

find . -delete

要僅刪除文件或僅刪除目錄,請使用-type選項:

# remove only files
find . -type f -delete


# remove only dirs
find . -type d -delete

實際上,我已經創建了一個名為bomb的小腳本(基於該片段),可以在不抱怨的情況下刪除文件: https//github.com/lingtalfi/bomb

晚會,但這是另一個解決方案,適用於我們古怪的構建環境:

if exist *.exe rm -f *.exe

不是免費輸出,但是減少並且干凈地退出:

# make clean
        if exist *.exe rm -f *.exe

在解決這個問題之前,我嘗試了許多替代方案,但都有問題。

暫無
暫無

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

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