# ============================================================ # 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"