# 컴파일러와 플래그 기본값은 환경 변수나 make 인자로 덮어쓸 수 있습니다. CC ?= cc CPPFLAGS ?= -Iinclude CFLAGS ?= -std=c11 -O2 -Wall -Wextra -Wpedantic LDLIBS ?= # Windows 빌드는 호환 컴파일러/링커를 사용할 때 bcrypt가 필요합니다. ifeq ($(OS),Windows_NT) LDLIBS += -lbcrypt endif # 최종 실행 파일 경로, 소스 목록, 여기서 파생되는 오브젝트 파일 경로입니다. TARGET := build/gerbera SOURCES := src/main.c src/encrypt.c src/decrypt.c src/cipher.c OBJECTS := $(SOURCES:src/%.c=build/%.o) # 모든 오브젝트 파일을 컴파일한 뒤 실행 파일을 링크합니다. $(TARGET): $(OBJECTS) $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS) # 각 C 파일을 build/.o로 컴파일하며, 필요하면 build/를 먼저 만듭니다. build/%.o: src/%.c include/gerbera.h | build $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< # 컴파일이나 링크 전에 출력 디렉터리가 존재하도록 보장합니다. build: mkdir -p build .PHONY: clean test # 방금 빌드한 실행 파일로 셸 테스트 모음을 실행합니다. test: $(TARGET) GERBERA_BIN=./$(TARGET) sh tests/test.sh # 생성된 모든 빌드 산출물을 삭제합니다. clean: rm -rf build