目录结构是,
上面的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在当前路径)
1gcc -o test test.c libcrexr64.a
makefile内容如下:
1234test:test.c
gcc -o test test.c libcrexr64.a
clean:
rm -fr *.o *~
更全面一点的命令如下:
1gcc -o test test.c -L. -lcrexr64
其中,-L.表示在当前目录(.)中查找函数库,-lcrexr64表示使用名为libcrexr64.a的函数库,相应的makefile你应该会自己写吧?