makefileldflags

How to use LDFLAGS in makefile


I am new to Linux OS. I am trying to compile a .c file using a makefile. The math library has to be linked. My makefile looks like this:

CC=gcc
CFLAGS=-Wall -lm

all:client

.PHONY: clean
clean:
    rm *~ *.o client

When I run make, I get the following error:

"undefined reference to rint"

So it is not able to link the math library.

But when I compile explicitly using

gcc client.c -lm -o client

it successfully compiles.

So how should I change my makefile such that it works. I have already tried adding LDFLAGS=-lm. But I get the same error.

I should also add that when I run make, it expands to

gcc -Wall -lm client.c -o client

(notice that when I run gcc explicitly with -lm at the end, it works).


Solution

  • Your linker (ld) obviously doesn't like the order in which make arranges the GCC arguments so you'll have to change your Makefile a bit:

    CC=gcc
    CFLAGS=-Wall
    LDFLAGS=-lm
    
    .PHONY: all
    all: client
    
    .PHONY: clean
    clean:
        $(RM) *~ *.o client
    
    OBJECTS=client.o
    client: $(OBJECTS)
        $(CC) $(CFLAGS) $(OBJECTS) -o client $(LDFLAGS)
    

    In the line defining the client target change the order of $(LDFLAGS) as needed.