c++ - -L and -l commands don't work in Makefile -


i have following makefile:

top = ../bank/src cc = gcc  cflags = -g -wall -std=c99 ldflags = -l$(top) lflags = -lvirtualbank includes = -i$(top)/virtualbank/  libs = virtualbank.a  bank_sources = $(top)/bank.c  virtualbank_sources = $(top)/virtualbank/bankserver.c $(top)/virtualbank/database.c $(top)/virtualbank/account.c  bank_objects = $(bank_sources:.c=.o) virtualbank_objects = $(virtualbank_sources:.c=.o) target = bank  all: virtualbank.a $(target)  virtualbank.a:$(virtualbank_objects)     rm -f $@     ar cq $@ $(virtualbank_objects)     mv *.a $(top)/  $(virtualbank_objects):$(virtualbank_sources)     $(cc) -c $(cflags) $(includes) $(virtualbank_sources)     mv *.o $(top)/virtualbank/  $(target):$(bank_objects)      $(cc) $(cflags) $(includes) $(bank_objects) -o $(target) $(ldflags) $(lflags)     chmod +x $(target)  $(bank_objects):$(bank_sources)     $(cc) $(cflags) -c $(includes) $(bank_sources)     mv *.o $(top)/   clean:      cd ../bank     rm -rf *.o bank     cd $(top)     rm -rf *.o *.a     cd $(top)/virtualbank     rm -rf *.o 

it project: https://github.com/mihaipro/bank when run make command, commpiler doesn't find virtualbank library. think problem on -l command, read again command, don't find problem.

can me?

thanks!

edit

error message:

gcc -g -wall -std=c99 -i../bank/src/virtualbank/  ../bank/src/bank.o -o bank -l../bank/src -lvirtualbank /usr/bin/ld: cannot find -lvirtualbank collect2: error: ld returned 1 exit status make: *** [bank] error 1 

from ld(1):

-l namespec --library=namespec add archive or object file specified namespec list of files link. option may used number of times. if namespec of form :filename, ld search library path file called filename, otherwise search library path file called libnamespec.a. on systems support shared libraries, ld may search files other libnamespec.a. specifically, on elf , sunos systems, ld search directory library called libnamespec.so before searching 1 called libnamespec.a. (by convention, ".so" extension indicates shared library.) note behavior not apply :filename, specifies file called filename.  linker search archive once, @ location specified on command line. if archive defines symbol undefined in object appeared before archive on command line, linker include appropriate file(s) archive. however, undefined symbol in object appearing later on command line not cause linker search archive again.  see -( option way force linker search archives multiple times.  may list same archive multiple times on command line.  type of archive searching standard unix linkers. however, if using ld on aix , note different behaviour of aix linker. 

your library called virtualbank.a, ld libvirtualbank.a.


Comments