gsamaras
gsamaras

Reputation: 73376

Makefile doesn't clean object files

Here is the 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)

I tried to append this *.o to the clean section (because of this answer), but it didn't work.

Upvotes: 1

Views: 12012

Answers (3)

Mark Galeck
Mark Galeck

Reputation: 6395

You should not normally need or want to "clean object files". The whole point of using Make, is that you don't clean up but stay dirty!

If you always want to clean everything up and start each build from scratch, then don't bother using Make, but write a shell script instead.

Upvotes: 0

gsamaras
gsamaras

Reputation: 73376

I had to modify the makefile as such:

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

Upvotes: 3

You might lack a

.PHONY: all clean count

rule. The .PHONY: target and rule should appear near the start of the Makefile, just after the variables definition (in your case, below the definition of FLAGS). If you happen to have all or clean files (check with ls -l clean all in a terminal), you need to remove them using rm

You'll clean using make clean command.

See also this answer for useful hints (about remake -x & make --trace)

BTW, your FLAGS  should probably be CFLAGS (see output of make -p)

Read the documentation of make

Upvotes: 2

Related Questions