c - What is missing in my makefile? -


i trying create first makefile. tested program using following commands:

command 1: gcc -wall -ggdb3 -std=c99 -o file1 file1.c -lm -lpthread -l command 2: gcc -wall -ggdb3 -std=c99 -o file2 file2.c -lm -lpthread 

everything works great. created makefile (please see below). keep getting error message. can take @ code , give me hint on problem is?

file2.o: in function `seed_primes': file2.c:(.text+0x461): undefined reference `sqrt' file2.c:(.text+0x466): undefined reference `sqrt' file2:(.text+0x533): undefined reference `sqrt' file2.o: in function `create_threads': file2.c:(.text+0x668): undefined reference `pthread_create' file2.c:(.text+0x6b5): undefined reference `pthread_join' file2.o: in function `next_seed': file2.c:(.text+0x860): undefined reference `sqrt' collect2: ld returned 1 exit status make: *** [file2] error 1 

here makefile:

cc=gcc debug=-ggdb3 cflags=#(debug) -wall -lm -lpthread -lrt -l  progs=file1 file2   all: $(progs)   file1: file1.o     $(cc) $(cflags) -o file1 file1.o   file1.o: file1.c     $(cc) $(cflags) -c file1.c       file2: file2.o     $(cc) $(cflags) -o file2 file2.o   file2.o: file2.c     $(cc) $(cflags) -c file2.c    clean:     rm -f $(progs) *.o *~ 

you've set cflags empty string because of # comment character (you intended use $ instead).

you should not set libraries cflags; belong in ldlibs.

you don't need file1: rule, file2: rule, or object file rules.

cc     = gcc debug  = -ggdb3 cflags = $(debug) -wall ldlibs = -lm -lpthread -lrt -l  progs  = file1 file2   all: $(progs)   clean:     rm -f $(progs) *.o *~ 

nb: ldlibs , related ldflags not 100% uniform across variants of make. ldflags should used library paths; ldlibs library names (-lxyz etc).

if need different libraries 2 programs, need create separate build rules (as had originally), or use conditional macro assignments (gnu make).


Comments

Popular posts from this blog

java - Run a .jar on Heroku -

java - Jtable duplicate Rows -

validation - How to pass paramaters like unix into windows batch file -