为什么我的 Makefile 规则不删除 .o 文件?
Why is my Makefile rule not deleting .o files?
我的 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)
目标即可。
另外,评论中指出的几点:
Makefile 变量名称区分大小写。使用 objects
或 OBJECTS
,不能同时使用。
您应该使用 $(EXEC)
,而不是在您的 clean
目标中硬编码 program
。这样您就不必在每次更改程序名称时都更改它。
您通常希望在编译后保留 .o
个文件,这样您就不必在进行小改动后重新编译所有内容。
您可以通过 .INTERMEDIATE
特殊目标使它们 intermediate files 使 Make 自动删除您的目标文件 -- 而不是在源未更改时不必要地重建它们。只需添加这一行:
.INTERMEDIATE: $(OBJECTS)
我的 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)
目标即可。
另外,评论中指出的几点:
Makefile 变量名称区分大小写。使用
objects
或OBJECTS
,不能同时使用。您应该使用
$(EXEC)
,而不是在您的clean
目标中硬编码program
。这样您就不必在每次更改程序名称时都更改它。您通常希望在编译后保留
.o
个文件,这样您就不必在进行小改动后重新编译所有内容。
您可以通过 .INTERMEDIATE
特殊目标使它们 intermediate files 使 Make 自动删除您的目标文件 -- 而不是在源未更改时不必要地重建它们。只需添加这一行:
.INTERMEDIATE: $(OBJECTS)