# ========================================================================== # acquire-core / TxCore Makefile # # .pgc --ecpg--> .c --gcc--> .o --ld--> 실행파일 # # 산출물: # build/libtxcore.a TxCore 공통 프레임워크 정적 라이브러리 # bin/acquire-core-server 온라인 서비스 등록 데모 (링크 검증) # bin/rc_match_batch 승인-매입 대사 배치 # ========================================================================== CC := gcc ECPG := ecpg AR := ar PG_INCDIR := $(shell pg_config --includedir 2>/dev/null) # 헤더 검색 경로 (프레임워크 + 업무 + PostgreSQL/ecpglib/sqlca) INCLUDES := -Iframework/txcore/include \ -Iframework/txcore/dbio \ -Iapp/include \ -I$(PG_INCDIR) # 고정길이 필드 strncpy/snprintf 는 의도된 관용구이므로 해당 경고만 억제 CFLAGS := -g -O2 -Wall -Wextra -Wno-unused-parameter \ -Wno-stringop-truncation -Wno-format-truncation $(INCLUDES) # ecpg 는 자체 전처리기이므로 -I 로 EXEC SQL INCLUDE 및 헤더 경로를 제공 ECPGFLAGS := -Iframework/txcore/include -Iframework/txcore/dbio -Iapp/include LDLIBS := -lecpg -lpq BUILD := build BIN := bin # ---- 소스 목록 ------------------------------------------------------------ TXCORE_SRC := framework/txcore/src/txcore.c COMMON_SRC := app/common/util_date.c \ app/common/util_amount.c \ app/common/util_msg.c # ECPG 전처리 대상 DBIO_PGC := app/dbio/purchase_dbio.pgc SVC_PGC := app/online/mg_recv_svc.pgc \ app/online/ac_intake_svc.pgc BATCH_PGC := app/batch/rc_match_batch.pgc # .pgc -> 생성 .c DBIO_GEN := $(DBIO_PGC:.pgc=.c) SVC_GEN := $(SVC_PGC:.pgc=.c) BATCH_GEN := $(BATCH_PGC:.pgc=.c) # ---- 오브젝트 ------------------------------------------------------------- TXCORE_OBJ := $(BUILD)/txcore.o COMMON_OBJ := $(patsubst app/common/%.c,$(BUILD)/%.o,$(COMMON_SRC)) DBIO_OBJ := $(BUILD)/purchase_dbio.o SVC_OBJ := $(BUILD)/mg_recv_svc.o $(BUILD)/ac_intake_svc.o SERVER_OBJ := $(BUILD)/server_main.o BATCH_OBJ := $(BUILD)/rc_match_batch.o LIBTXCORE := $(BUILD)/libtxcore.a SERVER_BIN := $(BIN)/acquire-core-server BATCH_BIN := $(BIN)/rc_match_batch # ========================================================================== .PHONY: all clean dirs gen all: dirs $(LIBTXCORE) $(SERVER_BIN) $(BATCH_BIN) @echo "==> 빌드 완료" @ls -la $(LIBTXCORE) $(SERVER_BIN) $(BATCH_BIN) dirs: @mkdir -p $(BUILD) $(BIN) # ---- ecpg: .pgc -> .c ----------------------------------------------------- %.c: %.pgc $(ECPG) $(ECPGFLAGS) -o $@ $< gen: $(DBIO_GEN) $(SVC_GEN) $(BATCH_GEN) # ---- TxCore 정적 라이브러리 ---------------------------------------------- $(TXCORE_OBJ): $(TXCORE_SRC) $(CC) $(CFLAGS) -c $< -o $@ $(LIBTXCORE): $(TXCORE_OBJ) $(AR) rcs $@ $^ # ---- 공통 유틸 오브젝트 --------------------------------------------------- $(BUILD)/%.o: app/common/%.c $(CC) $(CFLAGS) -c $< -o $@ # ---- ECPG 생성 .c 컴파일 -------------------------------------------------- $(DBIO_OBJ): $(DBIO_GEN) $(CC) $(CFLAGS) -c $< -o $@ $(BUILD)/mg_recv_svc.o: app/online/mg_recv_svc.c $(CC) $(CFLAGS) -c $< -o $@ $(BUILD)/ac_intake_svc.o: app/online/ac_intake_svc.c $(CC) $(CFLAGS) -c $< -o $@ $(BATCH_OBJ): $(BATCH_GEN) $(CC) $(CFLAGS) -c $< -o $@ # ---- server_main (plain C) ------------------------------------------------ $(SERVER_OBJ): app/online/server_main.c $(CC) $(CFLAGS) -c $< -o $@ # ---- 링크 ----------------------------------------------------------------- # 온라인 서버: 서비스들 + 공통 + DBIO + TxCore $(SERVER_BIN): $(SERVER_OBJ) $(SVC_OBJ) $(DBIO_OBJ) $(COMMON_OBJ) $(LIBTXCORE) $(CC) $(CFLAGS) -o $@ $(SERVER_OBJ) $(SVC_OBJ) $(DBIO_OBJ) $(COMMON_OBJ) \ -L$(BUILD) -ltxcore $(LDLIBS) # 배치: 배치 + DBIO + 공통 + TxCore $(BATCH_BIN): $(BATCH_OBJ) $(DBIO_OBJ) $(COMMON_OBJ) $(LIBTXCORE) $(CC) $(CFLAGS) -o $@ $(BATCH_OBJ) $(DBIO_OBJ) $(COMMON_OBJ) \ -L$(BUILD) -ltxcore $(LDLIBS) # ========================================================================== clean: rm -rf $(BUILD) $(BIN) rm -f $(DBIO_GEN) $(SVC_GEN) $(BATCH_GEN)