2012-01-20 23 views
8

我想用一個Makefile在數百個子目錄中生成目標。每個子目錄都是這樣的日期/時間戳記:20120119_153957,它與以下模式????????_??????匹配。沒有其他與此模式匹配的子目錄。如何通過globbing子目錄自動生成make目標列表?

我想生成的一個目標叫做????????_??????/graph.pdf。我有一個名爲make_graph的腳本,它將使圖形給出子目錄名稱。但我不知道如何編寫一個Makefile,它會自動將所有的子目錄直接放入並以編程方式生成這些目標。

例如,代碼SUBDIRS:=????????_??????似乎正確地遍歷所有的子目錄。我可以用這個規則檢查:

.PHONY: print 
print: 
     echo $(SUBDIRS) 

但是這個變量賦值

TARGETS:=$(SUBDIRS:%=%/graph.pdf) 

似乎並沒有做什麼,我希望和分配很多很多的目標。相反,以下規則僅打印一個目標。

.PHONY: print 
print: 
     echo $(TARGETS) 

這是非常令人困惑的是SUBDIRS應該有正確的子目錄,但TARGET只有一個文件。

+0

它是[如何使用通配符製作?]的副本(http://stackoverflow.com/questions/8937430/how-to-use-wildcard-with-make) –

+0

是的這是完整的問題。我不小心發佈了題目爲「如何使用通配符與make?」的部分問題。我試圖關閉或刪除那個其他問題,並將人們引導到這個問題上。嘆。 –

+0

我已經回答了這個問題。 :( –

回答

14

在您的示例中,glob匹配由shell執行。

GNU make有內置wildcard function,您可以使用如下:

SUBDIRS := $(wildcard ????????_??????) 

現在你可以使用這個變量來構建目標列表:

.PHONY : all 
all : $(SUBDIRS:%=%/graph.pdf) 

%/graph.pdf : # list prerequisites here. 
    # recipe to make '[email protected]' in directory '$(@D)' from '$^'. 

參見: pattern rulesautomatic variables

+0

工作得很好謝謝! –

+0

@ NathanFarrington,不客氣! –