.PHONY: all clean cleanall

CC = gcc

#定义头文件路径
MYFLAGS=  -I../include -I../paho.mqtt.c/src/
#定义编译选项，包括头文件路径、优化级别、调试信息、警告等。
CFLAGS = $(MYFLAGS) -Os -g -Wall -W -Wpointer-arith -DPAHO_MQTT_EXPORTS=1 -c
#定义生成共享库的编译选项。
SFLAGS = -fPIC -Os -g -Wall -W -Wpointer-arith -shared -D_GNU_SOURCE    -DPAHO_MQTT_EXPORTS=1  -o

# 定义目标文件列表，这些目标文件最终会被合并为静态库和共享库。
OBJS = core.o regfunc.o  mqtta.o cmd.o  cJSON.o myqueue.o list.o 

#定义最后生成的静态库、共享库文件
LIB_A=libcore.a
LIB_SO=libcore.so

#MQTT 相关文件
MQTT_LIB = paho-mqtt3a.so
MQTT_LIB_PATH = ../mqttlib/

AR= ar rcu
RANLIB= ranlib

#默认目标是生成共享库 libcore.so
all:  $(LIB_SO)


#生成静态库 libcore.a 的规则。依赖于目标文件 $(OBJS)。
$(LIB_A):$(OBJS)
	$(AR) $@ $(OBJS)
	$(RANLIB) $@
	@echo -e "\\033[32m $(LIB_A) is OK \\033[0m"

# 生成共享库 libcore.so 的规则。依赖于当前目录下的所有 .c 和 .h 文件。
$(LIB_SO):  $(wildcard *.c)  $(wildcard *.h)
	$(CC) -fPIC $(CFLAGS) core.c
	$(CC) -fPIC $(CFLAGS) mqtta.c
	$(CC) -fPIC $(CFLAGS) regfunc.c
	$(CC) -fPIC $(CFLAGS) cmd.c 
	$(CC) -fPIC $(CFLAGS) cJSON.c
	$(CC) -fPIC $(CFLAGS) myqueue.c
	$(CC) -fPIC $(CFLAGS) list.c
	$(CC) $(MYFLAGS)  $(SFLAGS) $@ $(OBJS)
	@echo -e "\\033[32m $(LIB_SO) is OK \\033[0m"


core.o: core.c core.h
	@$(CC) $(MYFLAGS) $(CFLAGS) $<


mqtta.o: mqtta.c mqtta.h
	@$(CC) $(MYFLAGS) $(CFLAGS) $<

regfunc.o:regfunc.c regfunc.h handle.c
	@$(CC) $(MYFLAGS) $(CFLAGS) $<

cmd.o:cmd.c cmd.h 
	@$(CC) $(MYFLAGS) $(CFLAGS) $<

cJSON.o:cJSON.c cJSON.h 
	@$(CC) $(MYFLAGS) $(CFLAGS) $<

myqueue.o:myqueue.c myqueue.h
	@$(CC) $(MYFLAGS) $(CFLAGS) $<

list.o:list.c list.h
	@$(CC) $(MYFLAGS) $(CFLAGS) $<


clean:
	-rm -rf $(OBJS) $(LIB_A) $(LIB_SO)


