我想弄清楚爲什麼我不能指定一個目標作爲在不同的目錄中。如何在不同目錄中指定makefile目標?
我想從json文件生成一些php類,但我已經將實際生成php的行更改爲虛擬echo語句,所以其他人可以複製粘貼並測試它們是否感覺非常慷慨。
還有其他兩件事情要添加到包含生成文件的目錄:
- 稱爲PatientDbPath.json
- 目錄中的虛擬依賴文件叫出來
如果我有一個makefile與下列:
.SUFFIXES: .php .json
.json.php:
echo "HelloMe" > PatientDbPath.php
PatientDbPath.php: PatientDbPath.json
clean:
$(RM) PatientDbPath.php
然後,一切正常,當我運行; PatientDbPath.php正確地創建,下一次我運行make,我得到的消息make: 'PatientDbPath.php' is up to date.
不過,我要生成一個單獨的目錄下的PHP文件,所以我在我的makefile文件更新以下內容:
.SUFFIXES: .php .json
.json.php:
echo "HelloMe" > out/PatientDbPath.php
out/PatientDbPath.php: PatientDbPath.json
clean:
$(RM) out/PatientDbPath.php
只要我這樣做,即使在out目錄中沒有文件PatientDbPath.php,Make也會告訴我make: Nothing to be done for 'out/PatientDbPath.php'
。
所以我想也許這是後綴規則的東西,我創建了第三個makefile。
out/PatientDbPath.php: PatientDbPath.json
echo "Whatever" > out/PatientDbPath.php
clean:
rm out/PatientDbPath.php
這個效果很好,就像第一個一樣。任何人都可以看到我在我的第二個makefile中做錯了什麼?
謝謝。
感謝您的回覆,我將嘗試更改我的真實makefile以使用建議的表示法。我會盡快跟進或標記答案。關於概念問題,我在這裏發佈的只是一個示例makefile,它顯示了問題,而不是我真正的makefile。 – 2010-11-09 21:21:53
好吧,我測試了一下,你是絕對正確的,把我的makefile改成使用'out /%。php:%.json'完成了。我有一個後續問題。我是否需要爲該目錄中的每個.json文件創建單獨的規則? – 2010-11-09 23:02:58
我找到了我想要的解決方案,基本上我需要添加下面一行:'all :: $(patsubst%.json,out /%。php,$(wildcard * .json))'這會添加一個依賴項每個php文件都要從該目錄中的每個.json生成 – 2010-11-09 23:59:38