2017-03-27 63 views
1

有史以來第一次嘗試寫入一個小的Makefile,但遇到了問題 - 如何在每次構建之後停止執行make clean?如何停止每個構建的清理執行?

TASS64=64tass 
EXOMIZER=exomizer 
EXOMIZERFLAGS=sfx basic -n 
VICE=/Applications/VICE/x64.app/Contents/MacOS/x64 
VICEFLAGS=-sidenginemodel 1803 -keybuf "\88" 
SOURCES=$(wildcard *.asm) 
OBJECTS=$(SOURCES:.asm=.prg) 

.PRECIOUS=Calvin.prg 

all: $(TARGETS) 

%.prg: %.asm 
    $(TASS64) -C -a -o [email protected] -i $< 

%: %.prg 
    $(VICE) $(VICEFLAGS) $< 

.PHONY: clean 
clean: 
    rm $(OBJECTS) 
+3

顯式列出您的目標。 「全部」規則正在消耗「乾淨」,所以它正在清洗。 – erip

+0

嗯,即使刪除了所有的規則,它仍然會。例如,發佈「make sprites」會將sprites.asm生成爲sprites.prg並執行prg文件,但是之後仍然會刪除sprites.prg –

+0

它是整個'Makefile'嗎?我沒有看到'TARGETS'的價值。 – uzsolt

回答

1

我想,它不會執行'make clean'。但是,可能發生的是中間(二級)結果被刪除。 GNU Make默認是這樣做的。爲了避免這樣做,何況這些中間結果X1, X2, ...

.SECONDARY: X1 X2 ... 

或者,爲了留在原地任何輔助效果,只需鍵入:

.SECONDARY: 

沒有任何具體的目標。

+0

SECONDARY沒有目標是一個很好的提示,謝謝 –

0

因此,事實證明,默認的Make行爲是在出現構建問題時刪除輸出。雖然在這種情況下構建正確,但我的makefile然後在VICE(c64模擬器)中啓動PRG文件。它正確運行,所以我退出了模擬器。

的退出動作返回,使將其視爲一個不成功建立一個退出代碼,因此刪除這是基於這個線程輸出PRG

- 通過刪除啓動VICE目標和隨後的測試 - Why does GNU make delete a file

+1

'$(VICE)$(VICEFLAGS)$ <|| true'是一種建議的解決方法,使模擬器始終運行「成功」。 –

+0

今天早上有更多的研究和測試 - 因爲我將「運行」步驟作爲最終目標,它將前面步驟的輸出視爲中間文件,從而刪除它們。我正在考慮用.SECONDARY標誌標記它們(請參閱https://www.gnu.org/software/make/manual/html_node/Special-Targets.html) –