Makefile 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. # ============================================================
  2. # Hikvision ISUP Client - Makefile
  3. # ============================================================
  4. # 项目名称
  5. PROJECT_NAME := hikvision-isup-client
  6. VERSION := 1.0.0
  7. # 编译器设置
  8. CC := gcc
  9. CFLAGS := -Wall -Wextra -std=c11 -g -O2
  10. CFLAGS += -D_GNU_SOURCE
  11. CFLAGS += -I./include
  12. # 库路径
  13. LIB_PATH := ./libs
  14. HCNETSDK_PATH ?= $(LIB_PATH)
  15. # 目标文件
  16. TARGET := $(PROJECT_NAME)
  17. # 源文件
  18. SRCDIR := src
  19. INCDIR := include
  20. SOURCES := $(wildcard $(SRCDIR)/*.c)
  21. OBJECTS := $(patsubst $(SRCDIR)/%.c, $(BUILD_DIR)/%.o, $(SOURCES))
  22. # 构建目录
  23. BUILD_DIR := build
  24. # HCNetSDK库文件(根据实际部署情况调整)
  25. # HCNETSDK_LIBS := -lhcnetsdk -lPlayCtrl -lHCPlayCtrl -lHCCommon -lHCWindowsComm -lHCCore
  26. # 如果没有实际SDK,使用模拟模式编译
  27. HCNETSDK_LIBS ?=
  28. # 其他依赖库
  29. OTHER_LIBS := -lpthread -ldl -lm
  30. # 最终链接库
  31. ALL_LIBS := $(HCNETSDK_LIBS) $(OTHER_LIBS)
  32. # 头文件依赖
  33. HEADERS := $(wildcard $(INCDIR)/*.h)
  34. # ============================================================
  35. # 编译目标
  36. # ============================================================
  37. .PHONY: all clean cleanbuild install test simulate help
  38. all: $(BUILD_DIR) $(TARGET)
  39. # 创建构建目录
  40. $(BUILD_DIR):
  41. mkdir -p $(BUILD_DIR)
  42. # 链接可执行文件
  43. $(TARGET): $(OBJECTS)
  44. $(CC) $(CFLAGS) -o $@ $^ $(ALL_LIBS)
  45. @echo "Build complete: $(TARGET)"
  46. @echo "Version: $(VERSION)"
  47. # 编译源文件
  48. $(BUILD_DIR)/%.o: $(SRCDIR)/%.c $(HEADERS)
  49. $(CC) $(CFLAGS) -c $< -o $@
  50. # 清理
  51. clean:
  52. rm -rf $(BUILD_DIR) $(TARGET)
  53. @echo "Clean complete"
  54. # 清理并重新编译
  55. cleanbuild: clean all
  56. @echo "Clean build complete"
  57. # 安装
  58. install: $(TARGET)
  59. install -d /usr/local/bin
  60. install -m 755 $(TARGET) /usr/local/bin/$(TARGET)
  61. @echo "Installed to /usr/local/bin/$(TARGET)"
  62. # 测试模式(不链接实际SDK)
  63. simulate: CFLAGS += -DHAVE_HIKVISION_SIMULATION
  64. simulate: clean $(BUILD_DIR) $(TARGET)
  65. @echo "Simulation build complete (no actual SDK required)"
  66. # 生成依赖文件
  67. deps: $(HEADERS)
  68. $(CC) $(CFLAGS) -MM $(SOURCES) > $(BUILD_DIR)/dependencies.mk
  69. # 帮助
  70. help:
  71. @echo "Hikvision ISUP Client Build System"
  72. @echo "=================================="
  73. @echo ""
  74. @echo "Targets:"
  75. @echo " all Build the project (default)"
  76. @echo " clean Remove build artifacts"
  77. @echo " cleanbuild Clean and rebuild"
  78. @echo " install Install to /usr/local/bin"
  79. @echo " simulate Build with simulation mode (no SDK needed)"
  80. @echo " test Run tests"
  81. @echo " help Show this help"
  82. @echo ""
  83. @echo "Variables:"
  84. @echo " HCNETSDK_PATH Path to HCNetSDK libraries (default: ./libs)"
  85. @echo ""
  86. @echo "Examples:"
  87. @echo " make # Build with SDK"
  88. @echo " make simulate # Build without SDK (simulation)"
  89. @echo " make HCNETSDK_PATH=/opt/hik # Build with custom SDK path"
  90. @echo " make install # Install to system"
  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"