makefile中编译静态链接库

目录结构是,

makefile中编译静态链接库_第1张图片


上面的makefile是子文件夹中的makefile,下面的是外层makefile,编译的话外层的目标依赖内层文件夹的静态链接库。

上层文件夹中的makefile内容如下:

O_FILES = MQTTConnectClient.o \
 MQTTConnectServer.o \
 MQTTDeserializePublish.o \
 MQTTFormat.o \
 MQTTPacket.o \
 MQTTSerializePublish.o \
 MQTTSubscribeClient.o \
 MQTTSubscribeServer.o \
 MQTTUnsubscribeClient.o \
 MQTTUnsubscribeServer.o \


all:libmqtt.a


libmqtt.a : $(O_FILES)
ar crv $@ $^


$(O_FILES) : %.o: %.c
cc -c $<


.PHONY:
clean:
rm $(O_FILES) $@

下层文件中的makefile内容是:



SUBDIRS = $(shell ls -l | grep ^d | awk '{print $$9}')
O_FILES = network.o komect_mqtt.o transport_logic.o main.o wrap_env.o ./mqtt_protocol/libmqtt.a




all : $(SUBDIRS) komect_binary 


$(SUBDIRS) : ECHO
make -C $@


ECHO :
@echo $(SUBDIRS)


komect_binary : $(O_FILES) 
cc -o komect_binary $(O_FILES) -lpthread


$(O_FILES) : %.o: %.c
cc -c $<






.PHONY:
clean:
rm $(O_FILES)


SUBDIRS = $(shell ls -l | grep ^d)


转载自http://bbs.csdn.net/topics/390856964

先了解GCC命令行编译吧,makefile也是根据命令行的参数来编写的,你需要调用一个静态库,最简单的方法就是(假设生成test可执行文件,libcrexr64.a在当前路径)

Plain Text code
?
1
gcc -o test test.c libcrexr64.a

makefile内容如下:
Plain Text code
?
1
2
3
4
test:test.c
     gcc -o test test.c libcrexr64.a
clean:
     rm -fr *.o *~

更全面一点的命令如下:
Plain Text code
?
1
gcc -o test test.c -L. -lcrexr64

其中,-L.表示在当前目录(.)中查找函数库,-lcrexr64表示使用名为libcrexr64.a的函数库,相应的makefile你应该会自己写吧?


你可能感兴趣的:(c)