2013-10-20 92 views
0
ifeq ($(SYSTEM),WINDOWS) 
# need to change something here : 
RM = @(if exist "$(subst /,\,$(DIRECTORY))" rmdir /s /q $(subst/,\,$(DIRECTORY)))) 
else 
RM := @rm -rf 
endif 

clean_1 : 
    $(RM) SOME/PATH/ 

clean_2 : 
    $(RM) SOME/PATH/ 

如何將替換路徑「SOME/PATH /」設置爲「DIRECTORY」? 這是可能的,而不改變代碼的結構?Makefile中的替換

P.S.我不能使用rmdir而不檢查文件,因爲它會產生錯誤。

UPDATE。我這樣做:

ifeq ($(SYSTEM),WINDOWS) 
RM = @(if exist "$(subst /,\,$1)" rmdir /s /q $(subst/,\,$1))) 
else 
RM = @rm -rf $1 
endif 

clean_% : 
    $(call RM, SOME/PATH/) 

它確實有效。感謝Mark Galeck。

有沒有辦法通過更換RM變量要做到這一點,在不改變乾淨 -target命令?

+0

是否有某些原因需要您這樣做? – Beta

+0

沒有特別的理由。但我想知道,這可能嗎? – user2900579

+0

是的,我添加到我的答案。是的,你想列出與每個乾淨目標的目錄 - 這是愚蠢的我沒有意識到這一點。 –

回答

0

使RM函數(請參閱手冊如何做到這一點)。

你將不得不

clean_%: 
    $(call RM, SOME/PATH/) 

是的,你也可以做到這一點不改變目標名稱,只是用函數調用替換$(RM),在原規定執行。

其實我覺得來處理,你似乎有,其中一個文件系統是由兩個操作系統訪問情況的最好方法,是引入變量分離器現在

/ := $(if $(filter WINDOWS, $(SYSTEM)),\,/) 

,你可以總是使用SOME$/PATH,您不必更改其他任何內容 - 只需在/之前放置$,您需要爲Windows提供路徑以及

+0

是的,它的工作原理。非常感謝你。 – user2900579