| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- # ============================================================
- # Hikvision ISUP Client - Makefile
- # ============================================================
- # 项目名称
- PROJECT_NAME := hikvision-isup-client
- VERSION := 1.1.0
- # 编译器设置
- CC := gcc
- CFLAGS := -Wall -Wextra -std=c11 -g -O2
- CFLAGS += -D_GNU_SOURCE
- CFLAGS += -I./include
- # 构建目录 (必须在 OBJECTS 之前定义, 因为 OBJECTS 用 := 即时展开)
- BUILD_DIR := build
- # 库路径
- LIB_PATH := ./libs
- HCNETSDK_PATH ?= $(LIB_PATH)
- # 目标文件
- TARGET := $(PROJECT_NAME)
- # 源文件
- SRCDIR := src
- INCDIR := include
- SOURCES := $(wildcard $(SRCDIR)/*.c)
- OBJECTS := $(patsubst $(SRCDIR)/%.c, $(BUILD_DIR)/%.o, $(SOURCES))
- # HCNetSDK库文件(真实SDK部署时打开下行)
- # HCNETSDK_LIBS := -L$(HCNETSDK_PATH) -lhcnetsdk -lPlayCtrl -lHCCore
- HCNETSDK_LIBS ?=
- # 其他依赖库
- OTHER_LIBS := -lpthread -ldl -lm
- # 最终链接库
- ALL_LIBS := $(HCNETSDK_LIBS) $(OTHER_LIBS)
- # 头文件依赖
- HEADERS := $(wildcard $(INCDIR)/*.h)
- # ============================================================
- # 编译目标
- # ============================================================
- .PHONY: all clean cleanbuild install test simulate check help deploy deps
- all: $(BUILD_DIR) $(TARGET)
- # 创建构建目录
- $(BUILD_DIR):
- mkdir -p $(BUILD_DIR)
- # 链接可执行文件
- $(TARGET): $(OBJECTS)
- $(CC) $(CFLAGS) -o $@ $^ $(ALL_LIBS)
- @echo "Build complete: $(TARGET)"
- @echo "Version: $(VERSION)"
- # 编译源文件
- $(BUILD_DIR)/%.o: $(SRCDIR)/%.c $(HEADERS)
- $(CC) $(CFLAGS) -c $< -o $@
- # 清理
- clean:
- rm -rf $(BUILD_DIR) $(TARGET)
- @echo "Clean complete"
- # 清理并重新编译
- cleanbuild: clean all
- @echo "Clean build complete"
- # 安装
- install: $(TARGET)
- install -d /usr/local/bin
- install -m 755 $(TARGET) /usr/local/bin/$(TARGET)
- @echo "Installed to /usr/local/bin/$(TARGET)"
- # 仿真/模拟模式: 定义 HAVE_HCNETSDK=0 走内置Mock实现(无需真实SDK)
- # 与源码 #ifndef HAVE_HCNETSDK 的模拟分支一致
- simulate: clean
- $(MAKE) CFLAGS="$(CFLAGS) -DHAVE_HIKVISION_SIMULATION" all
- @echo "Simulation build complete (no actual SDK required)"
- # 自测: 编译后以 -test 运行(不需要真实设备)
- test: $(TARGET)
- ./$(TARGET) -test
- # 生成依赖文件
- deps: $(BUILD_DIR) $(HEADERS)
- $(CC) $(CFLAGS) -MM $(SOURCES) > $(BUILD_DIR)/dependencies.mk
- # 帮助
- help:
- @echo "Hikvision ISUP Client Build System"
- @echo "=================================="
- @echo ""
- @echo "Targets:"
- @echo " all Build the project (default)"
- @echo " clean Remove build artifacts"
- @echo " cleanbuild Clean and rebuild"
- @echo " install Install to /usr/local/bin"
- @echo " simulate Build with simulation mode (no SDK needed)"
- @echo " test Build then run self-test (-test)"
- @echo " check Run cppcheck static analysis"
- @echo " help Show this help"
- @echo ""
- @echo "Examples:"
- @echo " make # Build"
- @echo " make simulate # Build without real SDK (mock)"
- @echo " make test # Build + self-test"
- # 包含依赖文件
- -include $(BUILD_DIR)/dependencies.mk
- # ============================================================
- # 部署脚本
- # ============================================================
- deploy: all
- @echo "Deploying $(TARGET)..."
- ./scripts/deploy.sh $(TARGET)
- # ============================================================
- # 代码检查
- # ============================================================
- check:
- @echo "Running code checks..."
- @cppcheck --enable=all --suppress=missingIncludeSystem $(SRCDIR)/*.c 2>&1 || true
- @echo "Code check complete"
|