在makefile中包含一个静态库

时间:2013-06-10 15:34:47

标签: makefile

我有一个目录结构

躯干

- LIB - libParser.a

- OBJ文件

- SRC

- 生成文件

我有以下makefile

CRYPTOLIB_TARGET = cryptolib.a 

LOCALLIBS = ./objs
LOCALLIBS_IMAGE = ./cryptolib.a
CC = gcc
AR = ar
DEBUG_FLAGS = 
LDEFSECOM_LOG_VERSION = -DSECOM_LOG_VERSION
CMPL_TIME_MACROS = -DENBL_DEBUG_PRINTF $(LDEFSECOM_LOG_VERSION)
ALLWARN = 
ALL_INCS = -I./src/INCLUDE
LIBS = -lrt -laio -lrt -lpthread -lm -lpq -ldl

LINK = $(CC) $(DEBUG_FLAGS) $(CMPL_TIME_MACROS) $(ALLWARN) $(ALL_INCS) $(LIBS) -c

default = CRYPTOLIB_TARGET

CRYPTOLIB_OBJ =             \
$(LOCALLIBS)/AES_crypt.o    \
$(LOCALLIBS)/bigdigits.o    \
$(LOCALLIBS)/DataEncryption.o   \
$(LOCALLIBS)/SiaEncryption.o

$(CRYPTOLIB_TARGET): $(CRYPTOLIB_OBJ)
$(AR) r $(CRYPTOLIB_TARGET) $(CRYPTOLIB_OBJ)

$(LOCALLIBS)/AES_crypt.o : \
src/AES_crypt.c
mkdir -p ./objs
$(LINK) src/AES_crypt.c -o $(LOCALLIBS)/AES_crypt.o

$(LOCALLIBS)/bigdigits.o : \
src/bigdigits.c
$(LINK) src/bigdigits.c -o $(LOCALLIBS)/bigdigits.o

$(LOCALLIBS)/DataEncryption.o : \
src/DataEncryption.c
$(LINK) src/DataEncryption.c -o $(LOCALLIBS)/DataEncryption.o

$(LOCALLIBS)/SiaEncryption.o : \
src/SiaEncryption.c
$(LINK) src/SiaEncryption.c -o $(LOCALLIBS)/SiaEncryption.o

clean:
rm -rf objs
rm -rf cryptolib.a

我想在我正在创建的输出库中包含libParser.a,但我不知道该怎么做。能否请给我指点,以便我可以包含库(libParser.a)并创建cryptolib.a作为最终输出库。

1 个答案:

答案 0 :(得分:1)

来自gcc online docs

  

-llibrary

     

-l library

     

...(删除了文字)......

     

通常这样找到的文件是库文件 - 存档文件   其成员是目标文件。链接器处理归档文件   通过它扫描定义到目前为止的符号的成员   被引用但未定义。但是,如果找到的文件是   普通的目标文件,它以通常的方式链接。唯一的   使用-l选项和指定文件名之间的区别是   -l用'lib'和'.a'包围库并搜索几个   目录。

所以......你可以指定库包含文件夹:

-L./lib

并将libParser.a放在库列表中(减去'lib'和'.a'):

-lParser -lrt -laio ...