# 编译器和工具链配置
CC = g++
CXX = g++

# 路径配置（建议使用相对路径或变量）
APP_NAME = publishRequest
ROOT_DIR := ../..
APP_PROJECT_DIR = := .
TARGET_DIR := ../../bin
INCLUDE_PATHS := -I../../include

# 编译选项
COMMON_CFLAGS = -Wall -Wextra -std=c++17
DEBUG_CFLAGS = -g -O0 -DLINUX_GCC -DVERSION="1.0.0" -D_DEBUG
RELEASE_CFLAGS = -O2 -DLINUX_GCC -DVERSION="1.0.0" -DNDEBUG


# 源文件和目标文件
SRCS = $(wildcard $(APP_PROJECT_DIR)/*.cpp)
OBJS = $(SRCS:.cpp=.o)
# 构建模式
all: release
# ///////////////////debug//////////////////////
.PHONY:debug

# 链接选项
LDFLAGS = -lZZDNetd -lZZSocketd -lZZThreadd -lcrypto -L$(TARGET_DIR) -Wl,-rpath,./ -lpthread 
TARGET = $(TARGET_DIR)/$(APP_NAME)d

debug: CFLAGS = $(COMMON_CFLAGS) $(DEBUG_CFLAGS)
debug: $(TARGET)
# 规则
$(TARGET): $(OBJS)
	$(CXX) -o $@ $^ $(LDFLAGS)

%.o: %.cpp
	$(CXX) $(CFLAGS) $(INCLUDE_PATHS) -c $< -o $@

# ///////////////////release//////////////////////
.PHONY:release
# 链接选项
LDFLAGS = -lZZDNet -lZZSocket -lZZThread -lcrypto -L$(TARGET_DIR) -Wl,-rpath,./ -lpthread 

TARGET = $(TARGET_DIR)/$(APP_NAME)
release: CFLAGS = $(COMMON_CFLAGS) $(RELEASE_CFLAGS)
release: $(TARGET)
# 规则
$(TARGET): $(OBJS)
	$(CXX) -o $@ $^ $(LDFLAGS) 

%.o: %.cpp
	$(CXX) $(CFLAGS) $(INCLUDE_PATHS) -c $< -o $@


# ///////////////////clean//////////////////////
.PHONY:clean 
clean_obj:
	rm -rf $(OBJS)
# 清理
clean:
	rm -rf $(OBJS) $(TARGET)

.PHONY: all debug release clean
