这是makefile:
OBJS = main.o hashFunction.o input.o list.o list_inverted_index.o memory.o operations.o sort.o
SOURCE = main.c hashFunction.c input.c list.c list_inverted_index.c memory.c operations.c sort.c
HEADER = hashFunction.h input.h list.h list_inverted_index.h memory.h operations.h sort.h
OUT = myexe
CC = gcc
FLAGS = -g -c -Wall
# -g option enables debugging mode
# -c flag generates object code for separate files
all: $(OBJS)
$(CC) -g $(OBJS) -o $(OUT)
# create/compile the individual files >>separately<<
main.o: main.c
$(CC) $(FLAGS) main.c
hashFunction.o: hashFunction.c
$(CC) $(FLAGS) hashFunction.c
input.o: input.c
$(CC) $(FLAGS) input.c
list.o: list.c
$(CC) $(FLAGS) list.c
list_inverted_index.o: list_inverted_index.c
$(CC) $(FLAGS) list_inverted_index.c
memory.o: memory.c
$(CC) $(FLAGS) memory.c
operations.o: operations.c
$(CC) $(FLAGS) operations.c
sort.o: sort.c
$(CC) $(FLAGS) sort.c
# clean house
clean:
rm -f $(OBJS) $(OUT)
# do a bit of accounting
count:
wc $(SOURCE) $(HEADER)
我尝试将此*.o
附加到干净部分(因为this回答),但它没有用。
答案 0 :(得分:1)
你可能缺少
.PHONY: all clean count
规则。 .PHONY:
target和规则应该出现在Makefile
的开头附近,就在变量定义之后(在您的情况下,低于FLAGS
的定义)。
如果您碰巧有all
或clean
个文件(请在终端中查看ls -l clean all
),则需要使用rm
您将使用make clean
命令进行清理。
另请参阅this answer了解有用的提示(关于remake -x
&amp; make --trace
)
顺便说一句,您的FLAGS
应该是CFLAGS
(参见make -p
的输出)
答案 1 :(得分:1)
我必须修改makefile:
all: $(OBJS)
$(CC) -g $(OBJS) -o $(OUT)
make clean
答案 2 :(得分:0)
您通常不需要或想要“清理目标文件”。使用Make的重点是,你不要清理,但要保持脏!
如果您总是希望清理所有内容并从头开始构建每个构建,那么不要使用Make,而是编写shell脚本。