It has been long time since last time I write a serious makefile
, please point it out if I am wrong.
there are ways to avoid encounter such issue by using implicit rules:
.PHONY: all clean
LDFLAGS=-lcustom
CFLAGS= # your gcc options start here
all: test
test.tab.c test.tab.h: test.y
bison -d test.y
lex.yy.c: test.l test.tab.h
flex test.l
lex.yy.o: lex.yy.c
tast.tab.o: test.tab.c test.tab.h
test_util.o: test_util.c
test: lex.yy.o test.tab.o test_util.o
clean:
rm -f test test.tab.c lex.yy.c test.tab.h *.o
then you avoided all painful stuff.
in general, it's better to generate .o
files explicitly then use linker to deal with them, such that if a build fails, you will definite know what's wrong with it, specifically compile time error, or linker error.
about the cause of your question, I think you should put -lcustom
in a correct position to make it work. I rarely see people put -l
flag right after gcc
so I am pretty sure it's not correct. I would guess you should put it at the very end.
PS: in my comment, nm
is a tool to list out the symbols in a object file. specifically, in your output, T
means the function is in text segment and it's exported so it should be able to be linked. check man nm
for more info.