Makefile从其他目录添加库

问题描述

我想为一个大型C项目创建一个Makefile,文件分为目录。我写的是

CC              =  gcc
AR              =  ar
ARFLAGS         =  rvs
CFLAGS          += -std=c99 -Wall -g

INCDIR          = ./include
LIBDIR          = ./lib
SRCDIR          = ./src
BINDIR          = ./bin
OBjdiR          = ./obj
TESTDIR         = ./testfile

INCLUDES        = -I.
LDFLAGS         = -L/lib
LIBFUNCTIONS    = /-lfunctions
LIBTH           = -lpthread
LIBUTILITY      = /-lutility
OPTFLAGS        = -O3 -DNDEBUG

TARGETS         =   $(BINDIR)/test_functions        \

.PHONY: all clean cleanall test1 test2
.SUFFIXES: .c .h

$(BINDIR)/%: $(SRCDIR)/%.c
    $(CC) $(CFLAGS) $(INCLUDES) $(OPTFLAGS) -o $@ $<

$(OBjdiR)/%.o: $(SRCDIR)/%.c 
    $(CC) $(CFLAGS) $(INCLUDES) $(OPTFLAGS) -c -o $@ $<

all     : $(TARGETS)        

$(BINDIR)/test_functions: $(OBjdiR)/test_functions.o $(LIBDIR)/libutility.a $(LIBDIR)/libfunctions.a
    $(CC)  $(CFLAGS) $(INCLUDES) $(FLAGS) $(LDFLAGS) -o $@ $< $(LIBUTILITY) $(LIBFUNCTIONS)

$(OBjdiR)/test_functions.o: $(SRCDIR)/test_functions.c $(INCDIR)/utility.h $(LIBDIR)/libutility.a $(INCDIR)/functions.h $(LIBDIR)/libfunctions.a
        $(CC) $(CCFLAGS) $(INCLUDES) $(FLAGS) -c -o $@ $<           

$(LIBDIR)/libutility.a: $(OBjdiR)/utility.o $(INCDIR)/utility.h
    $(AR) $(ARFLAGS) $@ $<  

$(LIBDIR)/libfunctions.a: $(OBjdiR)/functions.o $(INCDIR)/functions.h $(INCDIR)/utility.h
    $(AR) $(ARFLAGS) $@ $<  


clean       : 
    rm -f $(TARGETS)

cleanall    : clean
    \rm -f *.o *~ 

问题是,当我尝试使用makefile编译项目时,结果是

gcc  -std=c99 -Wall -g -I.  -L/lib -o bin/test_functions obj/test_functions.o -lutility -lfunctions
/usr/bin/ld: impossibile trovare -lutility
/usr/bin/ld: impossibile trovare -lfunctions
collect2: error: ld returned 1 exit status
make: *** [Makefile:54: bin/test_functions] Error 1

似乎编译器找不到库。我该怎么做才能使其正常工作?

解决方法

你有这个:

LIBDIR          = ./lib

然后在链接行中输入以下内容:

LDFLAGS         = -L/lib

注意到差异了吗?

你为什么不说:

LDFLAGS = -L$(LIBDIR)

避免重复自己(并弄错)?