我的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)
目标即可。
此外,评论中指出了一些注意事项:
-
生成文件变量名称区分大小写。使用
objects
或OBJECTS
,而不是两者兼而有之。
不应 在
clean
目标中硬编码program
,而应改用$(EXEC)
。这样,您就不必在每次更改程序名称时都更改它。您通常希望在编译后保留
.o
文件,这样您就不必在进行小更改后重新编译所有内容。
你可以让 Make 自动删除你的目标文件——而不是在源未被更改时不必要地重建它们——通过.INTERMEDIATE
特殊目标使它们成为中间文件。只需添加此行:
.INTERMEDIATE: $(OBJECTS)