CC = gcc CFLAGS = -shared -fPIC -Wall -Wextra -Werror -fno-strict-aliasing -fPIC -fno-omit-frame-pointer -fno-stack-protector -Wl,-z,relro,-z,now LDFLAGS = -ldl -ljson-c HOOK_LDFLAGS = -ldl -pthread TARGET_NAME = intercept.so HOOK_NAME = hook_write.so BUILD_DIR = build SRC_DIR = src SRC = $(wildcard $(SRC_DIR)/*.c) SRC := $(filter-out $(SRC_DIR)/hook_write.c, $(SRC)) # 排除 hook_write.c OBJ = $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%.o,$(SRC)) TARGET = $(BUILD_DIR)/$(TARGET_NAME) HOOK_SRC = $(SRC_DIR)/hook_write.c HOOK_OBJ = $(BUILD_DIR)/hook_write.o HOOK_TARGET = $(BUILD_DIR)/$(HOOK_NAME) # 如果需要开启 debug,只需执行 make DEBUG=1 ifeq ($(DEBUG),1) CFLAGS += -DDEBUG -g endif all: $(TARGET) $(HOOK_TARGET) $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c @mkdir -p $(BUILD_DIR) $(CC) $(CFLAGS) -c $< -o $@ $(TARGET): $(OBJ) @mkdir -p $(BUILD_DIR) $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(HOOK_TARGET): $(HOOK_OBJ) @mkdir -p $(BUILD_DIR) $(CC) $(CFLAGS) -Wno-error=unused-result -o $@ $^ $(HOOK_LDFLAGS) $(HOOK_OBJ): $(HOOK_SRC) @mkdir -p $(BUILD_DIR) $(CC) $(CFLAGS) -Wno-error=unused-result -c $< -o $@ clean: rm -rf $(BUILD_DIR) debug: rm -rf $(BUILD_DIR) $(MAKE) DEBUG=1 rebuild: clean all