我的Makefile
有效,但是调用main.o
时仍在创建make
文件。我一直在通过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
都不能使用。
而不是在program
目标中对clean
进行硬编码,而应使用$(EXEC)
。这样,您不必每次更改程序名称时都进行更改。
您通常希望在编译后保留.o
文件,因此在进行很小的更改后就不必重新编译所有内容。