Makefile 如何停止在每个构建上执行makeclean?

Makefile 如何停止在每个构建上执行makeclean?,makefile,Makefile,有史以来第一次尝试编写一个小的Makefile,但遇到了一个问题——如何在每次构建之后阻止它执行makeclean 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=$(S

有史以来第一次尝试编写一个小的Makefile,但遇到了一个问题——如何在每次构建之后阻止它执行makeclean

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 $@ -i $<

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

.PHONY: clean
clean:
    rm $(OBJECTS)
TASS64=64tass
eximizer=eximizer
EXOMIZERFLAGS=sfx基本-n
VICE=/Applications/VICE/x64.app/Contents/MacOS/x64
VICEFLAGS=-sidenginemodel 1803-keybuf“\88”
源=$(通配符*.asm)
对象=$(源:.asm=.prg)
.PRECIOUS=Calvin.prg
全部:$(目标)
%.prg:%.asm
$(TASS64)-C-a-o$@-i$<
%:%prg
$(副)$(副)$<
.假冒:干净
清洁:
rm$(对象)

因此,如果出现构建问题,默认的Make行为是删除输出。虽然在本例中它构建正确,但我的makefile随后会在VICE(c64 emulator)中启动PRG文件。它运行正常,所以我退出了模拟器

quit操作返回一个退出代码,该代码将Make视为不成功的生成,从而删除输出PRG


这是基于这个线程——以及通过删除启动VICE的目标进行的后续测试。

我猜,它不会执行“makeclean”。但是,可能发生的情况是删除中间(次要)结果。默认情况下,gnumake会这样做。为了防止make这样做,请在中提及这些中间结果
X1,X2,…

 .SECONDARY: X1 X2 ...
或者,为了保留任何次要结果,只需键入:

 .SECONDARY:

没有任何特定目标。

明确列出您的目标
clean
正在您的
all
规则中使用,因此它正在清理。嗯,即使删除all规则,它仍然会这样做。例如,发出“make sprites”将sprites.asm构建到sprites.prg中并执行prg文件,但仍然会随后删除sprites.prg整个
Makefile
?我看不到
TARGETS
的值。那是因为我错误地忽略了它。但我现在已经解决了这个问题-答案很快就会出来。
$(VICE)$(VICEFLAGS)$<| | true
是一个建议的解决方案,可以让emulator始终“成功”运行。今天上午进行更多的研究和测试-因为我将“运行”步骤作为最终目标,它将前面步骤的输出作为中间文件处理,从而删除它们。我正在研究用我从未使用过的.SECONDARY标志(参见)来标记它们。SECONDARY,不需要IMHO。