Makefile 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. # ============================================================
  2. # Hikvision ISUP Client - Makefile
  3. # ============================================================
  4. # 项目名称
  5. PROJECT_NAME := hikvision-isup-client
  6. VERSION := 1.1.0
  7. # 编译器设置
  8. CC := gcc
  9. CFLAGS := -Wall -Wextra -std=c11 -g -O2
  10. CFLAGS += -D_GNU_SOURCE
  11. CFLAGS += -I./include
  12. # 构建目录 (必须在 OBJECTS 之前定义, 因为 OBJECTS 用 := 即时展开)
  13. BUILD_DIR := build
  14. # 库路径
  15. LIB_PATH := ./libs
  16. HCNETSDK_PATH ?= $(LIB_PATH)
  17. # 目标文件
  18. TARGET := $(PROJECT_NAME)
  19. # 源文件
  20. SRCDIR := src
  21. INCDIR := include
  22. SOURCES := $(wildcard $(SRCDIR)/*.c)
  23. OBJECTS := $(patsubst $(SRCDIR)/%.c, $(BUILD_DIR)/%.o, $(SOURCES))
  24. # HCNetSDK库文件(真实SDK部署时打开下行)
  25. # HCNETSDK_LIBS := -L$(HCNETSDK_PATH) -lhcnetsdk -lPlayCtrl -lHCCore
  26. HCNETSDK_LIBS ?=
  27. # 其他依赖库
  28. OTHER_LIBS := -lpthread -ldl -lm
  29. # 最终链接库
  30. ALL_LIBS := $(HCNETSDK_LIBS) $(OTHER_LIBS)
  31. # 头文件依赖
  32. HEADERS := $(wildcard $(INCDIR)/*.h)
  33. # ============================================================
  34. # 编译目标
  35. # ============================================================
  36. .PHONY: all clean cleanbuild install test simulate check help deploy deps
  37. all: $(BUILD_DIR) $(TARGET)
  38. # 创建构建目录
  39. $(BUILD_DIR):
  40. mkdir -p $(BUILD_DIR)
  41. # 链接可执行文件
  42. $(TARGET): $(OBJECTS)
  43. $(CC) $(CFLAGS) -o $@ $^ $(ALL_LIBS)
  44. @echo "Build complete: $(TARGET)"
  45. @echo "Version: $(VERSION)"
  46. # 编译源文件
  47. $(BUILD_DIR)/%.o: $(SRCDIR)/%.c $(HEADERS)
  48. $(CC) $(CFLAGS) -c $< -o $@
  49. # 清理
  50. clean:
  51. rm -rf $(BUILD_DIR) $(TARGET)
  52. @echo "Clean complete"
  53. # 清理并重新编译
  54. cleanbuild: clean all
  55. @echo "Clean build complete"
  56. # 安装
  57. install: $(TARGET)
  58. install -d /usr/local/bin
  59. install -m 755 $(TARGET) /usr/local/bin/$(TARGET)
  60. @echo "Installed to /usr/local/bin/$(TARGET)"
  61. # 仿真/模拟模式: 定义 HAVE_HCNETSDK=0 走内置Mock实现(无需真实SDK)
  62. # 与源码 #ifndef HAVE_HCNETSDK 的模拟分支一致
  63. simulate: clean
  64. $(MAKE) CFLAGS="$(CFLAGS) -DHAVE_HIKVISION_SIMULATION" all
  65. @echo "Simulation build complete (no actual SDK required)"
  66. # 自测: 编译后以 -test 运行(不需要真实设备)
  67. test: $(TARGET)
  68. ./$(TARGET) -test
  69. # 生成依赖文件
  70. deps: $(BUILD_DIR) $(HEADERS)
  71. $(CC) $(CFLAGS) -MM $(SOURCES) > $(BUILD_DIR)/dependencies.mk
  72. # 帮助
  73. help:
  74. @echo "Hikvision ISUP Client Build System"
  75. @echo "=================================="
  76. @echo ""
  77. @echo "Targets:"
  78. @echo " all Build the project (default)"
  79. @echo " clean Remove build artifacts"
  80. @echo " cleanbuild Clean and rebuild"
  81. @echo " install Install to /usr/local/bin"
  82. @echo " simulate Build with simulation mode (no SDK needed)"
  83. @echo " test Build then run self-test (-test)"
  84. @echo " check Run cppcheck static analysis"
  85. @echo " help Show this help"
  86. @echo ""
  87. @echo "Examples:"
  88. @echo " make # Build"
  89. @echo " make simulate # Build without real SDK (mock)"
  90. @echo " make test # Build + self-test"
  91. # 包含依赖文件
  92. -include $(BUILD_DIR)/dependencies.mk
  93. # ============================================================
  94. # 部署脚本
  95. # ============================================================
  96. deploy: all
  97. @echo "Deploying $(TARGET)..."
  98. ./scripts/deploy.sh $(TARGET)
  99. # ============================================================
  100. # 代码检查
  101. # ============================================================
  102. check:
  103. @echo "Running code checks..."
  104. @cppcheck --enable=all --suppress=missingIncludeSystem $(SRCDIR)/*.c 2>&1 || true
  105. @echo "Code check complete"