# ============================================================ # Hikvision ISUP Client - Makefile # ============================================================ # 项目名称 PROJECT_NAME := hikvision-isup-client VERSION := 1.0.0 # 编译器设置 CC := gcc CFLAGS := -Wall -Wextra -std=c11 -g -O2 CFLAGS += -D_GNU_SOURCE CFLAGS += -I./include # 库路径 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)) # 构建目录 BUILD_DIR := build # HCNetSDK库文件(根据实际部署情况调整) # HCNETSDK_LIBS := -lhcnetsdk -lPlayCtrl -lHCPlayCtrl -lHCCommon -lHCWindowsComm -lHCCore # 如果没有实际SDK,使用模拟模式编译 HCNETSDK_LIBS ?= # 其他依赖库 OTHER_LIBS := -lpthread -ldl -lm # 最终链接库 ALL_LIBS := $(HCNETSDK_LIBS) $(OTHER_LIBS) # 头文件依赖 HEADERS := $(wildcard $(INCDIR)/*.h) # ============================================================ # 编译目标 # ============================================================ .PHONY: all clean cleanbuild install test simulate help 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)" # 测试模式(不链接实际SDK) simulate: CFLAGS += -DHAVE_HIKVISION_SIMULATION simulate: clean $(BUILD_DIR) $(TARGET) @echo "Simulation build complete (no actual SDK required)" # 生成依赖文件 deps: $(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 Run tests" @echo " help Show this help" @echo "" @echo "Variables:" @echo " HCNETSDK_PATH Path to HCNetSDK libraries (default: ./libs)" @echo "" @echo "Examples:" @echo " make # Build with SDK" @echo " make simulate # Build without SDK (simulation)" @echo " make HCNETSDK_PATH=/opt/hik # Build with custom SDK path" @echo " make install # Install to system" # 包含依赖文件 -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"