Makefile 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #定义 伪目标
  2. .PHONY: all lib script close clean cleanall
  3. #设置生成的可执行程序名
  4. TARGET = xinyun_mqtt_alarm.svr
  5. ######################### 以下内容一般无需修改 #########################
  6. #设置默认编译器
  7. CC = gcc
  8. INCLUDE_PATH = -Iinclude -Icore -Ipaho.mqtt.c/src -I.
  9. #编译参数
  10. CFLAGS = -Wall -W -O2 -g -Wpointer-arith -Wstrict-prototypes $(INCLUDE_PATH)
  11. #这个 -Wl,-E 不能少 要不然脚本里require *.so 会报错
  12. #MYLIBS = -Wl,-E -lrt -lpthread -lm -lz -ldl /usr/lib64/mysql/libmysqlclient.so #-lmysqlclient
  13. MYLIBS = -Wl,-E -lrt -lpthread -lm -lz -ldl -L/usr/lib64/mysql -lmysqlclient -Lsolib -Wl,-rpath=solib
  14. SO_LIB=solib
  15. PWD_PATH =$(shell pwd)
  16. #通用lib库
  17. COMMON_LIB = libcommon.a
  18. COMMON_LIB_PATH = lib/
  19. #通用lib库
  20. CORE_LIB = libcore.so
  21. CORE_LIB_PATH = core/
  22. #MQTT 相关文件
  23. MQTT_LIB = libpaho-mqtt3a.so
  24. MQTT_LIB_SRC = paho.mqtt.c
  25. MQTT_LIB_PATH = paho.mqtt.c/src/
  26. #设置运行目录 及脚本目录
  27. RUN_PATH = bin/
  28. #自定义命令名
  29. CP = cp -rf
  30. RM = rm -rf
  31. #默认的make目标
  32. all: lib $(TARGET) $(MQTT_LIB) $(CORE_LIB)
  33. #
  34. lib:
  35. cd lib && $(MAKE)
  36. ifneq (,$(wildcard ./src/main.c))
  37. @#如果存在main.c则需要清除及重新编译
  38. cd src && $(MAKE)
  39. endif
  40. #目标 生成游戏主程序 并附带copy一些脚本
  41. $(TARGET): ./src/main.o $(MQTT_LIB) $(CORE_LIB) $(wildcard $(CORE_LIB_PATH)/*.c) $(wildcard $(CORE_LIB_PATH)/*.h)
  42. @# 后面的lib库在调整先后位置后可能导致编译出错哦
  43. $(CP) $(CORE_LIB_PATH)$(CORE_LIB) $(SO_LIB)
  44. $(CP) $(MQTT_LIB_PATH)$(MQTT_LIB) $(SO_LIB)
  45. $(CC) $(CFLAGS) ./src/main.o $(COMMON_LIB_PATH)$(COMMON_LIB) $(MYLIBS) $(SO_LIB)/$(CORE_LIB) $(SO_LIB)/$(MQTT_LIB) -o $(TARGET)
  46. $(CP) $(TARGET) $(RUN_PATH)
  47. $(RM) $(RUN_PATH)/$(SO_LIB) && $(CP) $(SO_LIB) $(RUN_PATH)
  48. $(RM) $(TARGET)
  49. @echo -e "\\033[32m $(TARGET) is OK and Move to DIR: $(RUN_PATH) \\033[0m"
  50. # MQTT_LIB 的生成方法
  51. $(MQTT_LIB): $(wildcard $(MQTT_LIB_SRC)/src/*.c) $(wildcard $(MQTT_LIB_SRC)/src/*.h)
  52. cd $(MQTT_LIB_SRC) && $(MAKE)
  53. $(CORE_LIB): $(wildcard $(CORE_LIB_PATH)/*.c) $(wildcard $(CORE_LIB_PATH)/*.h)
  54. cd $(CORE_LIB_PATH) && $(MAKE)
  55. #普通清理
  56. clean:
  57. cd lib && $(MAKE) clean
  58. -$(RM) $(SO_LIB)/*.so
  59. -$(RM) $(TARGET)
  60. ifneq (,$(wildcard ./src/main.c))
  61. @#如果存在main.c则需要清除及重新编译
  62. cd src && $(MAKE) clean
  63. endif
  64. cd $(CORE_LIB_PATH) && $(MAKE) clean
  65. cd $(MQTT_LIB_SRC) && $(MAKE) clean
  66. #深度清理
  67. cleanall: clean
  68. cd lib && $(MAKE) cleanall
  69. cd $(MQTT_PATH) && $(MAKE) clean
  70. $(RM) $(TARGET)
  71. ifneq (,$(wildcard src/main.c))
  72. @#如果src 目录下有文件 main.c 才能进去啊
  73. cd src && $(MAKE) clean
  74. endif
  75. @#如果是 bighead 的目录 则还多做点事情
  76. ifeq "$(HOME)" "/home/bighead"
  77. find . -name cscope\.* -exec rm -f {} \;
  78. find . -name tags -exec rm -f {} \;
  79. endif