2014-04-11 284 views
0

我有一個makefile,它列出了我需要做的事情的幾個目錄,例如,刪除路徑中的所有目錄

DIRS = dir1 dir2 path/to/dir3 

all: 
    $(foreach DIR,$(DIRS), somecommand --source=$(SOURCEDIR)/$(DIR) --dest=$(DIR);) 

clean: 
    rm -rf $(DIRS) 

目前clean目標刪除dir1dir2dir3,但我想它刪除dir1dir2path。沿線的東西:

clean: 
    $(foreach DIR,$(DIRS), rm -rf --parents $(DIR);) 

有沒有簡單的方法來做到這一點?

回答

1

有沒有這樣的標誌可用rm。你可以做這樣的事情:

clean: 
     $(foreach DIR,$(DIRS),rm -rf $(firstword $(subst /, ,$(DIR)));) 

如果你絕對相信,你總是要刪除的第一個目錄下的所有內容在每一個路徑DIRs(聽起來很危險的我,但是......)

+0

只有在我意外地使用絕對路徑時纔是危險的。再說一次,這只是一個錯字,所以最後 - 是的,相當危險。 – DanielGibbs

+1

絕對路徑不會成爲問題,因爲它的第一個單詞將被採用,並且在您的本地目錄中不可見。以上僅適用於植根於當前工作目錄的路徑。例如,如果你將'/ usr/bin'添加到'DIRS',那麼上面就會運行'rm -rf usr',這是行不通的(大概除非你碰巧有一個'usr'本地子目錄)。 – MadScientist