2010-03-20 59 views
7

我有一個生成文件的東西,如以下目標:生成文件:執行從另一個目標一個目標加上附加命令

 
install: 
    do a whole bunch of stuff to install 

dist: install 
    cp README.txt $(INSTALL_DIR) 
    zip $(INSTALL_DIR) 

我想不會從目標install重複的命令,使dist執行install前第一執行它自己的命令。

調用make dist確實執行來自目標install的所有命令,但隨後停止並且它不執行其自己的命令,例如, cp

我錯過了什麼嗎?

+0

通常情況下,你的「安裝」規則將取決於「所有」點左右,和「所有」會做「一大堆的東西來建立',留下'安裝'做'整個一堆東西來安裝'。 – 2010-03-20 05:40:02

+0

@Jonathan是的,這實際上是它在做什麼。我會編輯它。 – cschol 2010-03-20 05:42:03

回答

9

嘗試在你的Makefile中加入這一行

.PHONY:安裝DIST

+0

就是這樣。你能詳細說明爲什麼這是必要的嗎?謝謝。 – cschol 2010-03-20 05:38:21

+0

安裝目錄是否爲'install'(或者可能是'dist')?這往往會混淆事物。 「.PHONY」符號(GNU Make擴展名)的含義大致意味着「目標」將被視爲始終過時。 – 2010-03-20 05:45:57

+6

要詳細說明Jonathan對.PHONY所說的話,可以這樣想:假定所有目標都是實際文件,並查看它是否能找到該文件,如果文件不能被認爲是過期的,並且規則執行。 .PHONY告訴make它不是一個真正的文件,所以不要找它,或者試圖將它與任何模式/規則相匹配,當然如果真的存在一個文件/目錄,那麼不要讓該文件成爲目標,可能將目標視爲最新的。 http://www.gnu.org/s/hello/manual/make/Phony-Targets.html – jhabbott 2011-11-30 21:15:30

相關問題