RubyBlade
RubyBlade

Reputation: 1

c - Make is only running 'gcc' with no parameters

I'm learning how to use C and Make, but Make is making me tear my hair out. When I run make with all targets I've created it fails, running gcc with no parameters, except one of them randomly works just fine. Here is what happens when I try to build with most of the targets:

$ make strvector.o
gcc
gcc: fatal error: no input files
compilation terminated.
make: *** [vector.o] Error 4

and when I run the one that works:

$ make word.o
gcc -Wall -g -ansi -pedantic -c -o word.o word.c

Here is my makefile:

CC = gcc
CFLAGS = -Wall -g -ansi -pedantic -c -o $@ $^
LD = gcc
LDFLAGS =

fw: fw.o vector.o hashtable.o strvector.o
        $(LD) $(LDFLAGS) -o fw vector.o hashtable.o strvector.o word.o

fw.o: fw.c vector.o hashtable.o strvector.o word.o
        $(CC) $(CFALGS)

vector.o: vector.c word.o
        $(CC) $(CFALGS)

hashtable.o: hashtable.c vector.o word.o
        $(CC) $(CFLAGS)

word.o: word.c
        $(CC) $(CFLAGS)

strvector.o: strvector.c
        $(CC) $(CFALGS)

I cannot for the life of me figure out why word.o builds fine but not anything else. If anyone could help that would be much appreciated.

--Edit-- I made a typo. Writing CFALGS instead of CFLAGS. not sure how I missed that one. Thanks guys!

Upvotes: 0

Views: 85

Answers (1)

Barmar
Barmar

Reputation: 782166

You left out the filenames in the compilation commands.

strvector.o: strvector.c
    $(CC) -c $(CFLAGS) -o $@ $<

$@ gets replaced with the current target, $< is replaced with the current dependency.

Upvotes: 1

Related Questions