2009-10-04 58 views
1

我有一堆目錄。我想爲每個目錄建立一個對象。假設OBJS包含「構建/ DIR1構建/ DIR2構建/ DIR3」,圖案我匹配使用shell和%進行依賴生成?

build/%: % 
    <do something here> 

我想該目錄中添加,每個對象,依賴每個文件(遞歸)。我想做點像

build/%: $(shell find %) 
    <do something here> 

但是好像第二個'%'沒有擴展。我怎樣才能得到這個工作?

(我注意到奇怪的是,在 '$(殼回聲%)' 的 '%' 已展開。)

感謝。

+0

你的問題還不清楚。你的意思是你想make build/obj1,並且你希望build/dir1中的每個文件都是它的先決條件(並且對於dir2和dir3是相同的)? – Beta 2009-10-05 15:31:40

回答

3

我不認爲你可以調用一個進程來計算依賴關係。運行進程來創建依賴關係的唯一方法是讓變量接收進程的輸出並使用該變量,但這不會解決您的問題。

常見的解決辦法是生成依賴文件,並將它們包括:

 
include build/*.depend 

build/%: build/%.depend % 
    ... 

build/%.depend: 
    command to generate explicit dependencies for build/% into build/%.depend 
    possibly recursive make invocations 

第一次構建,不會產生依賴文件,但生成輸出將不存在,要麼,所以無論如何,構建操作將會運行。在隨後的make調用中,包含文件在那裏,並由make來考慮。

1
You could try: 
DIR := % 
$(shell find $(DIR))