2014-04-30 52 views
1

我想寫一個通用的makefile,一次滿足各種項目的大部分需求。但後來我絆倒了以下內容:目標是/最後?

%/: 
    mkdir -p [email protected] 

.SECONDEXPANSION: 
$(objects): $$(dir [email protected]) 

我想到這每當$(objects)爲目標的目錄確實需要一個運行得很好,並創建一個目錄。但不知何故,它沒有奏效。我檢查並發現以下內容:目標不能以'/'結尾。

有沒有辦法避免這種情況?

+0

這是不正確的目標不能在「/」結尾。但是,在某些情況下,make會去除文件名後面的斜槓,這會導致問題。 – MadScientist

+0

我猜.PHONY-targets可以嗎?一切都被認爲是一個文件,不是嗎?我測試了規則'all:something /',並且它沒有說「針對某個目標的規則」,所以我認爲它在目標的末尾剝去了每個'/'。 – WorldSEnder

+0

在這個規則中,'something /'不是它的前提條件。如果你寫了一個像'%/:'這樣的規則,那麼你運行'make -p'來打印規則數據庫,你會看到斜槓沒有從目標中刪除。 – MadScientist

回答

1

您只需選擇一個不能作爲文件夾中文件名稱的後綴。例如.。因此,規則變成如下:

%/.: 
    mkdir -p [email protected] 

.SECONDEXPANSION: 
$(objects): $$(dir [email protected]). 

至於.指目錄本身這應該不會產生問題是什麼,所以有史以來:)