Makefile不删除中间文件

dar*_*sky 3 c makefile gnu-make

Makefile不是删除中间文件.我已经定了.INTERMEDIATE.这是我的Makefile:

OBJECTS=prefixer.o stack.o
CFLAGS=-Werror -Wmissing-prototypes -g
LIBS=-lm
CC=gcc

prefixer : $(OBJECTS)
    $(CC) -o prefixer $(OBJECTS) $(LIBS)

prefixer.o : stack.h
    $(CC) -c prefixer.c -o $@ $(CFLAGS)
stack.o : stack.c stack.h
    $(CC) -c stack.c -o $@ $(CFLAGS)

.INTERMEDIATE: %.o

.PHONY: clean
clean : 
    -rm prefixer *.o
Run Code Online (Sandbox Code Playgroud)

有什么问题.INTERMEDIATE

Bas*_*tch 8

Gnu为角色制作特殊目标.INTERMEDIATE

你可能意味着

 .SECONDARY:  $(OBJECTS)
Run Code Online (Sandbox Code Playgroud)

因为我认为如果你把它放在.INTERMEDIATE那么对象将永远被删除,你可能不希望这样.我不认为你可以有意义地%.o作为特殊目标的先决条件.

我建议保留目标文件,这样你就不会浪费时间重新编译它们.

跑一次make -p会教你很多关于make知道的规则.

使用remake -x (即重制)非常有用,至少可以调试复杂的Makefile-s.你也可以使用,make -d但我觉得它太冗长了.

您可能需要使用比更好的建设者makeomake.


Bet*_*eta 5

特殊目标.INTERMEDIATE不适用于%通配符.试试这个:

.INTERMEDIATE: stack.o prefixer.o
Run Code Online (Sandbox Code Playgroud)