在makefile中包含库路径

时间:2012-04-20 21:22:30

标签: makefile

我的makefile如下所示

program_NAME := myprogram
program_C_SRCS := $(wildcard *.cc)
program_C_OBJS := ${program_C_SRCS:.cc=.o}
program_OBJS := $(program_C_OBJS) 
program_INCLUDE_DIRS := ../INCLUDE
program_LIBRARY_DIRS := 
program_LIBRARIES :=
CPPFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir))
LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir))
LDFLAGS += $(foreach library,$(program_LIBRARIES),-l$(library))

.PHONY: all clean distclean

all: $(program_NAME)

$(program_NAME): $(program_OBJS)
$(LINK.cc) $(program_OBJS) -o $(program_NAME)

clean:
    @- $(RM) $(program_NAME)
    @- $(RM) $(program_OBJS)

distclean: clean

我在某个路径stack.a中创建了一个库/home/Desktop/kk/stack。 我想将这个库包含到我的makefile中,这样在链接期间它应该从该路径中获取。

我试着给:

program_LIBRARY_DIRS := /home/Desktop/kk/stack

并在链接步骤中给出了:

$(LINK.cc) $(program_OBJS) stack.a -o $(program_NAME)

但makefile无法从上述路径中获取库。

相反,如果我直接给出:

$(LINK.cc) $(program_OBJS) /home/Desktop/kk/stack/stack.a -o $(program_NAME)

效果很好。

请帮助我如何包含此库路径,以便我不必在链接命令中给出库的位置。

1 个答案:

答案 0 :(得分:3)

-L链接选项仅适用于名为libX.alibX.so且使用-lX链接的库,用于某些字符串X。您需要将stack.a重命名为libstack.a,并在链接命令中将其引用为-lstack

(理想情况下,您还应该将其放在program_LIBRARIES定义中并在$(LINK.cc)行中使用它。)