Makefile不会清除目标文件

时间:2014-10-24 17:50:48

标签: c makefile

这是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回答),但它没有用。

3 个答案:

答案 0 :(得分:1)

你可能缺少

.PHONY: all clean count

规则。 .PHONY: target和规则应该出现在Makefile的开头附近,就在变量定义之后(在您的情况下,低于FLAGS的定义)。 如果您碰巧有allclean个文件(请在终端中查看ls -l clean all),则需要使用rm

删除它们

您将使用make clean命令进行清理。

另请参阅this answer了解有用的提示(关于remake -x&amp; make --trace

顺便说一句,您的FLAGS 应该是CFLAGS(参见make -p的输出)

阅读documentation of make

答案 1 :(得分:1)

我必须修改makefile:

all: $(OBJS)
    $(CC) -g $(OBJS) -o $(OUT)
    make clean

答案 2 :(得分:0)

您通常不需要或想要“清理目标文件”。使用Make的重点是,你不要清理,但要保持脏!

如果您总是希望清理所有内容并从头开始构建每个构建,那么不要使用Make,而是编写shell脚本。