瀏覽代碼

makefile添加注释

cuci 1 年之前
父節點
當前提交
735a93e42d
共有 4 個文件被更改,包括 39 次插入93 次删除
  1. 26 9
      Makefile
  2. 0 76
      README.md
  3. 9 7
      core/Makefile
  4. 4 1
      lib/Makefile

+ 26 - 9
Makefile

@@ -11,9 +11,15 @@ CC = gcc
 
 INCLUDE_PATH = -Iinclude  -Icore -Ipaho.mqtt.c/src  -I.
 #编译参数
+#-Wall: 启用大多数警告信息 -W: 启用额外的警告 -O2: 启用优化级别2 -g: 生成调试信息 -Wpointer-arith: 启用指针算术警告 -Wstrict-prototypes: 启用严格的函数原型声明
 CFLAGS = -Wall -W -O2 -g -Wpointer-arith -Wstrict-prototypes $(INCLUDE_PATH)
 #这个 -Wl,-E 不能少 要不然脚本里require *.so 会报错
-#MYLIBS = -Wl,-E -lrt -lpthread -lm -lz -ldl  /usr/lib64/mysql/libmysqlclient.so  #-lmysqlclient
+#-Wl,-E 传递-E选项给链接器,这可以用于各种目的,包括从生成的共享对象中导出所有符号。
+#-lrt:链接到实时库 -lpthread:链接到线程库 -lm:链接到数学库 -lz:链接到压缩库 -ldl:链接到动态连接库
+# -L/usr/lib64/mysql:指定 MySQL 客户端库所在的目录。
+# -lmysqlclient:链接到 MySQL 客户端库。
+#-Lsolib:指定其他共享库所在的目录。
+#-Wl,-rpath=solib:设置运行时库搜索路径,包括指定的目录(在这里是 solib)。这确保程序在运行时在该目录中查找共享库。
 MYLIBS = -Wl,-E  -lrt -lpthread -lm -lz -ldl  -L/usr/lib64/mysql  -lmysqlclient -Lsolib -Wl,-rpath=solib
 
 
@@ -24,16 +30,16 @@ PWD_PATH =$(shell pwd)
 COMMON_LIB =   libcommon.a   
 COMMON_LIB_PATH = lib/
 
-#通用lib库
+#核心库lib库
 CORE_LIB = libcore.so
 CORE_LIB_PATH = core/
 
-#MQTT 相关文件
+#MQTT 相关库的源代码路径
 MQTT_LIB = libpaho-mqtt3a.so
 MQTT_LIB_SRC = paho.mqtt.c
 MQTT_LIB_PATH = paho.mqtt.c/src/
 
-#设置运行目录 及脚本目录
+#设置生成可执行文件的存放路径
 RUN_PATH = bin/
 
 #自定义命令名
@@ -43,7 +49,8 @@ RM = rm -rf
 #默认的make目标
 all:  lib $(TARGET) $(MQTT_LIB) $(CORE_LIB)  
 
-#
+#进入 lib 目录并执行 make 命令
+#如果存在main.c则需要重新编译
 lib:
 	cd lib && $(MAKE)
 ifneq (,$(wildcard ./src/main.c))
@@ -51,22 +58,32 @@ ifneq (,$(wildcard ./src/main.c))
 	cd src && $(MAKE)
 endif
 
-#目标 生成游戏主程序 并附带copy一些脚本
+#目标 生成主程序 并附带copy一些脚本
+#./src/main.o、$(MQTT_LIB)、$(CORE_LIB) 是依赖项。表示在执行该目标之前需要完成这些依赖项的构建
+#$(wildcard $(CORE_LIB_PATH)/*.c) $(wildcard $(CORE_LIB_PATH)/*.h) 是通配符,表示匹配所有.c 和.h 文件
 $(TARGET): ./src/main.o $(MQTT_LIB) $(CORE_LIB)  $(wildcard $(CORE_LIB_PATH)/*.c) $(wildcard $(CORE_LIB_PATH)/*.h) 
 	@# 后面的lib库在调整先后位置后可能导致编译出错哦
 	$(CP) $(CORE_LIB_PATH)$(CORE_LIB) $(SO_LIB)
-	$(CP) $(MQTT_LIB_PATH)$(MQTT_LIB) $(SO_LIB) 
+	$(CP) $(MQTT_LIB_PATH)$(MQTT_LIB) $(SO_LIB)
+	@# 使用 gcc 编译器将目标文件、通用库、库路径和其他选项链接为最终的可执行程序
 	$(CC) $(CFLAGS) ./src/main.o $(COMMON_LIB_PATH)$(COMMON_LIB)  $(MYLIBS)  $(SO_LIB)/$(CORE_LIB)  $(SO_LIB)/$(MQTT_LIB)  -o $(TARGET)
+	@# 将生成的可执行程序复制到运行目录
 	$(CP) $(TARGET) $(RUN_PATH)
+	@# 删除临时目录下的 lib 目录,并将 lib 目录复制到运行目录
 	$(RM) $(RUN_PATH)/$(SO_LIB) && $(CP)   $(SO_LIB) $(RUN_PATH)
+	@# 删除当前目录下生成的可执行程序
 	$(RM) $(TARGET)
 	@echo -e "\\033[32m $(TARGET) is OK and Move to DIR: $(RUN_PATH)  \\033[0m"
 
 # MQTT_LIB 的生成方法
+# 获取指定路径下所有的 .c 文件和 .h 文件
+# 进入 $(MQTT_LIB_SRC) 目录,然后执行 make 命令
 $(MQTT_LIB): $(wildcard $(MQTT_LIB_SRC)/src/*.c) $(wildcard $(MQTT_LIB_SRC)/src/*.h)
 		cd $(MQTT_LIB_SRC)  && $(MAKE) 
 
-
+# CORE_LIB 的生成方法
+# 获取指定路径下所有的 .c 文件和 .h 文件
+# 进入 $(CORE_LIB_PATH) 目录,然后执行 make 命令。
 $(CORE_LIB): $(wildcard $(CORE_LIB_PATH)/*.c) $(wildcard $(CORE_LIB_PATH)/*.h)
 		cd $(CORE_LIB_PATH) && $(MAKE)
 
@@ -98,4 +115,4 @@ endif
 ifeq "$(HOME)" "/home/bighead"
 	find . -name cscope\.*  -exec rm -f {} \;
 	find . -name tags -exec rm -f {} \;
-endif
+endif

+ 0 - 76
README.md

@@ -1,76 +0,0 @@
-# 1. cmqtt 
-    	cmqtt 后台服务器,依赖于mqtt协议传输,在mqtt各层中属于mqtt客户端的一种,与mqtt broker 连接,处理前端和订阅的设备指令。
-    是用c语言编写而成,在开源paho.mqtt.c库的基础上开发而成。
-## 1.1. 描述
-
-​		cmqtt功能:
-
-​                       1.负责和mqtt broker 通信,基于tcp上的mqtt协议,包括连接,消息订阅,消息发布
-
-​						2.cmqtt处理web,移动端发送的设备控制,设备配置下发指令,指令从数据库读取
-
-​						3.cmqtt处理设备上传的电器数据,传感器数据等数据的存储
-
-## 1.2. 文档
-- 指令发送表协议
-[[doc]](./doc/指令发送表协议.doc)
-- 慧控通信协议
-[[pdf](./doc/慧控通信协议.pdf)]
-
-## 1.3. 文件目录
-**cmqtt 1.3**     
-**├─bin**   																			//可执行生成目录  
-│  ├─config.mk  
-│  ├─go.sh  
-│  ├─main.config 																		 //配置文件  
-│  ├─Makefile  																			 //make编译    
-│  ├─restart  
-**├─core**    																			 //业务逻辑核心代码   
-│  ├─cmd.h  
-│  ├─core.c  
-│  ├─core.h  
-│  ├─handle.c  																	        //处理接收指令 包含handle.ack.c  handle.request.c handle.upload.c->  
-│  ├─handle.ack.c  																        //处理确认消息模块    
-│  ├─handle.request.c  														            //处理请求配置模块    
-│  ├─handle.upload.c  														            //处理上传数据模块    
-│  ├─mqtta.h  																		    //mqtt客户端   
-│  ├─mqtta.c  
-│  ├─regfunc.h  																	    //mqtt客户端回调函数实现    
-│  ├─regfunc.c  
-│  ├─Makefile  
-**├─doc**    																			//文档   
-**├─include**  																			// mysql 、错误、全局变量头文件    
-
-│  ├─cmd.init.h  
-│  ├─data.h  
-│  ├─data.h  
-│  ├─decode.h  
-│  ├─errno.h  
-│  ├─globle.h  
-│  ├─init.h  
-│  ├─mysql.sdk.h  
-│  ├─status.h  
-**├─lib**   																			//mysql 、错误、全局变量实现文件   
-
-│  ├─cmd.init.c  
-│  ├─decode.c  
-│  ├─globle.c  
-│  ├─init.c  
-│  ├─Makefile  
-│  ├─mysql.sdk.c  
-│  ├─readme  
-
-**├─paho.mqtt.c**    															        //paho  mqtt库目录      
-**├─src**      																			//主程序入口    
-│  ├─main.c  
-│  ├─main.h  
-│  ├─Makefile    
-
-
-​        
-
-
-
-## 1.4. 工作流程
-
-![cmqtt流程](./doc/cmqtt流程.png)

+ 9 - 7
core/Makefile

@@ -2,14 +2,17 @@
 
 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
 
-# [待完善] 确定这四个lib用不上了 就把源码干掉
-OBJS = core.o regfunc.o  mqtta.o cmd.o  cJSON.o myqueue.o list.o # sync.o lordsdk.o record.o LibMd5.o
+# 定义目标文件列表,这些目标文件最终会被合并为静态库和共享库。
+OBJS = core.o regfunc.o  mqtta.o cmd.o  cJSON.o myqueue.o list.o 
 
-#定义最后生成的静态库文件
+#定义最后生成的静态库、共享库文件
 LIB_A=libcore.a
 LIB_SO=libcore.so
 
@@ -20,17 +23,17 @@ MQTT_LIB_PATH = ../mqttlib/
 AR= ar rcu
 RANLIB= ranlib
 
-#all: $(LIB_A) $(LIB_SO)
+#默认目标是生成共享库 libcore.so
 all:  $(LIB_SO)
 
 
-#生成 lib.a 方便外面引用
+#生成静态库 libcore.a 的规则。依赖于目标文件 $(OBJS)。
 $(LIB_A):$(OBJS)
 	$(AR) $@ $(OBJS)
 	$(RANLIB) $@
 	@echo -e "\\033[32m $(LIB_A) is OK \\033[0m"
 
-# lib.so 
+# 生成共享库 libcore.so 的规则。依赖于当前目录下的所有 .c 和 .h 文件。
 $(LIB_SO):  $(wildcard *.c)  $(wildcard *.h)
 	$(CC) -fPIC $(CFLAGS) core.c
 	$(CC) -fPIC $(CFLAGS) mqtta.c
@@ -39,7 +42,6 @@ $(LIB_SO):  $(wildcard *.c)  $(wildcard *.h)
 	$(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"
 

+ 4 - 1
lib/Makefile

@@ -19,8 +19,11 @@ RANLIB= ranlib
 all: $(LIB_A)
 
 #生成 lib.a 方便外面引用
+#依赖于 $(OBJS),即四个源文件编译得到的目标文件
 $(LIB_A):$(OBJS)
-	$(AR) $@ $(OBJS)
+	#使用 ar 工具将目标文件打包成静态库		
+	$(AR) $@ $(OBJS)	
+	#运行 ranlib 命令更新静态库的索引,以确保正确性
 	$(RANLIB) $@
 	@echo -e "\\033[32m $(LIB_A) is OK \\033[0m"