为什么我的生成文件规则不删除 .o 文件?



我的Makefile工作正常,但我仍然得到调用make时创建的main.o文件。
我一直在通过Stack Overflow寻找像我这样的主题,但我无法理解原因。

以下是Makefile的内容:

EXEC=program
SOURCES=main.c
OBJECTS=$(SOURCES:.c=.o)
CC=gcc -pthread -lpthread
CFLAGS=-std=gnu99 -g
.PHONY: clean
default: $(EXEC)
main.o: main.c
clean:
-rm *.o $(objects) program
%.o: %.c
$(CC) -o $@ -c $< $(CFLAGS)
$(EXEC): $(OBJECTS)
$(CC) -o $@ $^

如果您希望在构建步骤后删除目标文件,只需将rm -f *.o命令附加到$(EXEC)目标即可。

此外,评论中指出了一些注意事项:

  • 生成文件变量名称区分大小写。使用objectsOBJECTS,而不是两者兼而有之。

  • 不应
  • clean目标中硬编码program,而应改用$(EXEC)。这样,您就不必在每次更改程序名称时都更改它。

  • 您通常希望在编译后保留.o文件,这样您就不必在进行小更改后重新编译所有内容。

你可以让 Make 自动删除你的目标文件——而不是在源未被更改时不必要地重建它们——通过.INTERMEDIATE特殊目标使它们成为中间文件。只需添加此行:

.INTERMEDIATE: $(OBJECTS)

最新更新