# Block-IP Makefile # C语言重构版本 CC = gcc CFLAGS = -Wall -Wextra -O2 -std=c11 LDFLAGS = TARGET = bip TARGET_STATIC = bip-static INSTALL_PATH = /usr/local/bin # 源文件目录 SRC_DIR = src INC_DIR = include OBJ_DIR = obj # 源文件 SRCS = $(SRC_DIR)/main.c \ $(SRC_DIR)/common.c \ $(SRC_DIR)/log.c \ $(SRC_DIR)/ip_utils.c \ $(SRC_DIR)/geo.c \ $(SRC_DIR)/nftables.c \ $(SRC_DIR)/whitelist.c \ $(SRC_DIR)/ban.c \ $(SRC_DIR)/pam.c \ $(SRC_DIR)/stats.c \ $(SRC_DIR)/install.c # 目标文件 OBJS = $(SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o) # 头文件依赖 DEPS = $(wildcard $(INC_DIR)/*.h) # 默认目标 all: $(TARGET) $(TARGET_STATIC) # 创建目标目录 $(OBJ_DIR): mkdir -p $(OBJ_DIR) # 编译目标文件 $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(DEPS) | $(OBJ_DIR) $(CC) $(CFLAGS) -I$(INC_DIR) -c $< -o $@ # 链接生成动态可执行文件 $(TARGET): $(OBJS) $(CC) $(OBJS) $(LDFLAGS) -o $(TARGET) @strip $(TARGET) @echo "编译完成: $(TARGET) (dynamic)" # 链接生成静态可执行文件 $(TARGET_STATIC): $(OBJS) $(CC) $(OBJS) -static -o $(TARGET_STATIC) @strip $(TARGET_STATIC) @echo "编译完成: $(TARGET_STATIC) (static)" # 安装 install: $(TARGET) @if [ $$(id -u) -ne 0 ]; then \ echo "错误: 需要root权限执行安装"; \ exit 1; \ fi install -m 755 $(TARGET) $(INSTALL_PATH)/$(TARGET) @echo "已安装到: $(INSTALL_PATH)/$(TARGET)" @echo "运行 'bip install' 来完成系统配置" # 卸载 uninstall: @if [ $$(id -u) -ne 0 ]; then \ echo "错误: 需要root权限执行卸载"; \ exit 1; \ fi $(INSTALL_PATH)/$(TARGET) uninstall || true rm -f $(INSTALL_PATH)/$(TARGET) @echo "已卸载" # 清理编译文件 clean: rm -rf $(OBJ_DIR) $(TARGET) $(TARGET_STATIC) @echo "清理完成" # 清理所有文件(包括配置) distclean: clean rm -rf /etc/bip rm -f /var/log/bip.log /var/log/bip.log.1 @echo "深度清理完成" # 调试版本 debug: CFLAGS += -g -DDEBUG debug: clean $(TARGET) # 显示帮助 help: @echo "BIP 构建系统" @echo "" @echo "可用目标:" @echo " make - 编译动态和静态版本" @echo " make install - 安装到系统 (需要root)" @echo " make uninstall- 从系统卸载 (需要root)" @echo " make clean - 清理编译文件" @echo " make distclean- 清理所有文件(包括配置)" @echo " make debug - 编译调试版本" @echo " make help - 显示此帮助信息" .PHONY: all install uninstall clean distclean debug help