Мой 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)
она прекрасно работает.
Пожалуйста, помогите мне, как включить этот путь библиотеки, чтобы мне не нужно было указывать расположение библиотеки в команде связи.
Спасибо geekosaur !!! В вышеприведенном make-файле я переименовал библиотеку, как вы предложили, и поместил местоположение каталога в библиотеку в program_LIBRARY_DIRS, а затем ее рабочий тон. Но когда я храню адрес библиотеки в program_LIBRARIES: = ../stack/libstack.a. В чем разница между этими двумя параметрами -l и -L? И если я даю абсолютный адрес библиотеки в program_LIBRARIES, то почему она терпит неудачу ..please clarify ... Спасибо –
'program_LIBRARIES: = -lstack' - как вы должны использовать его, если вы его переименовали, и вы добавили исправить опцию '-L' пути к' program_LIBRARY_DIRS'. – geekosaur