Files
2025-02-Numerical/Makefile
2025-09-12 22:36:10 +09:00

61 lines
1.4 KiB
Makefile

BUILD_DIR := ./build
CC := gcc
CFLAGS := -Wall -g -std=c90
LDFLAGS := -lm
LIB_DIR := ./lib/nr/ansi
LIB_INCLUDE := $(LIB_DIR)/other
LIB_SRCS := $(LIB_DIR)/recipes/machar.c
LIB_OBJS := $(patsubst %.c,$(BUILD_DIR)/lib/%.o,$(notdir $(LIB_SRCS)))
HW_DIR := ./hws
ifeq ($(strip $(hw)),)
else
TARGET_NAME := hw$(hw)
SRC_DIR := $(HW_DIR)/hw$(hw)
endif
ifeq ($(strip $(TARGET_NAME)),)
all:
@echo "에러: 'target'을 지정해주세요."
else
TARGET_EXEC := $(BUILD_DIR)/$(TARGET_NAME).out
TARGET_SRCS := $(wildcard $(SRC_DIR)/*.c)
TARGET_OBJS := $(patsubst %.c,$(BUILD_DIR)/hw$(hw)/%.o,$(notdir $(TARGET_SRCS)))
OBJS := $(TARGET_OBJS) $(LIB_OBJS)
SRCS := $(TARGET_SRCS) $(LIB_SRCS)
all: run
endif
init:
@mkdir -p $(BUILD_DIR)
@mkdir -p $(BUILD_DIR)/lib
@mkdir -p $(BUILD_DIR)/$(TARGET_NAME)
clean:
@echo "빌드 결과물을 삭제합니다..."
@rm -rf $(BUILD_DIR)
build: init $(TARGET_EXEC)
@echo "빌드 완료"
$(TARGET_EXEC): $(OBJS)
@echo "링킹 중: $@"
$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
$(OBJS): %.o:
@echo "컴파일 중: $@"
$(eval TARGET_C_BASENAME := $(patsubst %.o,%.c,$(notdir $@)))
$(eval FOUND_SRC := $(foreach src,$(SRCS),$(if $(filter $(TARGET_C_BASENAME),$(notdir $(src))),$(src))))
$(CC) $(CFLAGS) $(LDFLAGS) -I $(LIB_INCLUDE) -c $(FOUND_SRC) -o $@
run: clean build
@echo "실행 시작"
@echo "============"
@$(TARGET_EXEC)
dist:
mkdir -p out
zip -j -9 out/$(TARGET_NAME).zip $(TARGET_SRCS)