2013-08-21 25 views
1

我想使用make作爲可重複研究的工具。這項研究涉及到一個長的管道,我會爲許多獨立的數據集運行,要求我將「僞使」描述如下工作流程:Make中靜態模式規則的語法有多靈活?

datasets = foo bar baz 

$(datasets): path/to/result/%.dat: 
    ./generate_dat_from % 

$(datasets): path/to/figs/%.png: path/to/result/%.dat 
    ./generate_png_from_dat path/to/result/%.dat 

[etc.] 

如果make是簡單地替代每個數據集的名稱對於'%',這將是我想要的。然而,GNU使手冊中有這樣說the syntax of static pattern rules

當目標模式的目標時,'%」匹配可以匹配目標名稱的任何部分;這部分被稱爲幹。模式的其餘部分必須完全匹配。

這就解釋了爲什麼上面描繪的代碼不起作用。什麼是最好的方式來實現這個目標,或者使得這項工作根本就不是正確的工具?

在此先感謝,並且道歉,如果這個問題很糟糕 - 我是新來的,幾乎不知道如何表達這個問題。

回答

1

我想我已經想通了。問題出現在以下行:

./generate_dat_from % 

這是非法使用'%'。正確的形式是:

$(datasets): path/to/result/%.dat: 
./generate_dat_from $* 

其中$ *捕獲任何與目標中%匹配的內容。

希望這對他人有用。