2012-04-20 46 views
1

我的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 

我已經在一些路徑/home/Desktop/kk/stack創建的庫stack.a包括庫路徑。 我想將這個庫包含到我的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) 

它完美的作品。

請幫助我如何包含此庫路徑,以便我不必在鏈接命令中提供庫的位置。

回答

3

-L鏈接選項僅適用於名爲libX.alibX.so和使用-lX鏈接庫,對一些字符串X。您需要將stack.a重命名爲libstack.a,並在鏈接命令中將其稱爲-lstack

(你也應該,理想情況下,放進了program_LIBRARIES定義和使用,在$(LINK.cc)線。)

+0

感謝geekosaur!在上面的makefile中,我已經按照你的建議重新命名了庫,並把庫存在program_LIBRARY_DIRS中的目錄位置放在那裏,然後工作正常。但是,當我將庫地址保存在program_LIBRARIES:= ../stack/libstack.a中時。這兩個-l和-L選項有什麼區別?如果我給program_LIBRARIES庫的絕對地址,那麼爲什麼它失敗..請說明...謝謝 – 2012-04-20 21:56:36

+1

'program_LIBRARIES:= -lstack'是你應該如何使用它,如果你改名它,你添加了將'-L'路徑選項更正爲'program_LIBRARY_DIRS'。 – geekosaur 2012-04-20 21:59:58