1

私の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)

それは完璧に動作します。

リンクコマンドでライブラリの場所を指定する必要がないように、このライブラリパスを含める方法を教えてください。

4

1 に答える 1

3

リンクオプションは、一部の文字列に対して、を使用して名前が付けられた、または-Lリンクされたライブラリにのみ適用されます。名前をに変更し、linkコマンドで。として参照する必要があります。libX.alibX.so-lXXstack.alibstack.a-lstack

(また、理想的には、それをprogram_LIBRARIES定義に入れて、$(LINK.cc)行で使用する必要があります。)

于 2012-04-20T21:26:11.380 に答える