2017-03-27 13 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

ターゲットを明示的にリストします。あなたの 'all'ルールで' clean 'が使われているので、それはきれいです。 – erip

+0

ええ、すべてのルールを削除しても、それでもやります。たとえば、 "make sprites"を発行すると、sprites.asmがsprites.prgに作成され、prgファイルが実行されますが、その後はsprites.prgが削除されます。 –

+0

全体が 'Makefile'ですか?私は 'TARGETS'の価値を見ません。 – uzsolt

答えて

1

「make clean」は実行されません。しかし、中間(副)結果が削除されることがあります。 GNU Makeはデフォルトでこれを行います。

.SECONDARY: 

を任意の特定のターゲットなし:そうすることから作る防ぐために、これらの中間結果は

.SECONDARY: X1 X2 ... 
X1, X2, ...

あるいは、所定の位置に任意の二次的結果を残すためには、単に入力言及します。

+0

は良いヒント、おかげで(https://www.gnu.org/software/make/manual/html_node/Special-Targets.htmlを参照).SECONDARYフラグとそれらをマークするに探しています –

0

デフォルトのMake動作は、ビルドに問題がある場合に出力を削除することです。このケースでは正しくビルドされていますが、私のmakefileはVICE(c64エミュレータ)のPRGファイルを起動します。それは正しく動作するので、私はエミュレータを終了します。 VICEを起動し、ターゲットを削除することで、その後のテスト - Why does GNU make delete a file -

は、ザ・アクションが失敗したビルドとしてお菓子を作るの終了コードを返したので、これは、このスレッドに基づいて出力PRG

を削除し終了します。

+1

'$(VICE)$(VICEFLAGS)$ <|| true 'はエミュレータを常に「成功」​​させるための回避策として提案されています。 –

+0

今朝より多くの調査とテストを行っています。私は最終目標として「実行」ステップを持っているため、前のステップの出力を中間ファイルとして処理して削除します。ノー目標とSECONDARY –

関連する問題