2013-01-23 35 views
0

我有一個Makefile與此類似:隱含規則不運行,儘管其depedency缺少

.PRECIOUS: do/%.build 

do/%.install: do/%.build 
    touch [email protected] 

do/%.build: 
    touch [email protected] 

我的本意是,所有做/ .install目標取決於DO/ .build目標,那如果構建目標的標記文件缺失,則生成構建目標的規則;如果構建標記更新,則運行安裝目標。

$ make do/foo.install 
touch do/foo.build 
touch do/foo.install 

它也工作正常,如果構建郵票是新的:這第一次運行時正常工作

$ touch do/foo.build 
$ make do/foo.install 
touch do/foo.install 

但是,如果安裝郵票存在,並且按預期不起作用建立圖章丟失:

$ rm do/foo.build 
$ make do/foo.install 
make: `do/foo.install' is up to date. 

安裝目標未運行。我該怎麼辦?這是否與我必須添加.PRECIOUS行以避免自動刪除構建標記有關?

問候, 蒂諾

回答

0

the manual

「如果是普通的文件B不存在,並認爲依賴於B的目標,這必然造成B,然後從B更新目標但如果b是一箇中間文件[即從模式規則中推斷出來的],那麼make就可以保持足夠的獨立性,除非b的某個先決條件比那個目標更新,否則它不會打擾更新b或最終目標。是更新該目標的其他原因。「

有幾種方法來解決這個問題,但我知道沒有真正乾淨的方法。其他目標是否依賴於buildinstall文件?

+0

還有其他目標依賴於'install'文件。 – Tino