Makefile

Download
makefile 108 lines 3.1 KB
  1# Makefile for Hash Table Project
  2# ν•΄μ‹œ ν…Œμ΄λΈ” ν”„λ‘œμ νŠΈ λΉŒλ“œ 파일
  3
  4CC = gcc
  5CFLAGS = -Wall -Wextra -std=c11 -O2
  6DEBUG_FLAGS = -g -DDEBUG
  7
  8# νƒ€κ²Ÿ μ‹€ν–‰ 파일
  9TARGETS = hash_functions hash_chaining hash_linear_probing dictionary
 10
 11# κΈ°λ³Έ νƒ€κ²Ÿ: λͺ¨λ“  ν”„λ‘œκ·Έλž¨ 컴파일
 12all: $(TARGETS)
 13
 14# κ°œλ³„ ν”„λ‘œκ·Έλž¨ 컴파일
 15hash_functions: hash_functions.c
 16	$(CC) $(CFLAGS) -o $@ $<
 17	@echo "βœ“ hash_functions 컴파일 μ™„λ£Œ"
 18
 19hash_chaining: hash_chaining.c
 20	$(CC) $(CFLAGS) -o $@ $<
 21	@echo "βœ“ hash_chaining 컴파일 μ™„λ£Œ"
 22
 23hash_linear_probing: hash_linear_probing.c
 24	$(CC) $(CFLAGS) -o $@ $<
 25	@echo "βœ“ hash_linear_probing 컴파일 μ™„λ£Œ"
 26
 27dictionary: dictionary.c
 28	$(CC) $(CFLAGS) -o $@ $<
 29	@echo "βœ“ dictionary 컴파일 μ™„λ£Œ"
 30
 31# 디버그 버전 컴파일
 32debug: CFLAGS += $(DEBUG_FLAGS)
 33debug: clean all
 34	@echo "βœ“ 디버그 λ²„μ „μœΌλ‘œ 컴파일 μ™„λ£Œ"
 35
 36# μ‹€ν–‰ νƒ€κ²Ÿ
 37run_functions: hash_functions
 38	@echo "=== ν•΄μ‹œ ν•¨μˆ˜ 비ꡐ μ‹€ν–‰ ==="
 39	./hash_functions
 40
 41run_chaining: hash_chaining
 42	@echo "=== 체이닝 ν•΄μ‹œ ν…Œμ΄λΈ” μ‹€ν–‰ ==="
 43	./hash_chaining
 44
 45run_probing: hash_linear_probing
 46	@echo "=== μ„ ν˜• 탐사 ν•΄μ‹œ ν…Œμ΄λΈ” μ‹€ν–‰ ==="
 47	./hash_linear_probing
 48
 49run_dict: dictionary
 50	@echo "=== 사전 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ ==="
 51	./dictionary
 52
 53# λͺ¨λ“  ν”„λ‘œκ·Έλž¨ 순차 μ‹€ν–‰ (ν…ŒμŠ€νŠΈμš©)
 54test: all
 55	@echo "\n[1/4] ν•΄μ‹œ ν•¨μˆ˜ 비ꡐ ν…ŒμŠ€νŠΈ"
 56	@./hash_functions | head -50
 57	@echo "\n[2/4] 체이닝 ν…ŒμŠ€νŠΈ"
 58	@./hash_chaining | head -30
 59	@echo "\n[3/4] μ„ ν˜• 탐사 ν…ŒμŠ€νŠΈ"
 60	@./hash_linear_probing | head -30
 61	@echo "\n[4/4] λͺ¨λ“  ν…ŒμŠ€νŠΈ μ™„λ£Œ"
 62
 63# 정리
 64clean:
 65	rm -f $(TARGETS)
 66	rm -f *.o
 67	rm -f dictionary.txt
 68	@echo "βœ“ μƒμ„±λœ 파일 μ‚­μ œ μ™„λ£Œ"
 69
 70# μ½”λ“œ ν’ˆμ§ˆ 검사 (정적 뢄석)
 71check:
 72	@echo "=== μ½”λ“œ ν’ˆμ§ˆ 검사 ==="
 73	@for file in *.c; do \
 74		echo "Checking $$file..."; \
 75		$(CC) $(CFLAGS) -fsyntax-only $$file; \
 76	done
 77	@echo "βœ“ λͺ¨λ“  파일 문법 검사 μ™„λ£Œ"
 78
 79# λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 검사 (valgrind ν•„μš”)
 80memcheck: all
 81	@echo "=== λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 검사 (valgrind) ==="
 82	@if command -v valgrind >/dev/null 2>&1; then \
 83		valgrind --leak-check=full --show-leak-kinds=all ./hash_chaining; \
 84		valgrind --leak-check=full --show-leak-kinds=all ./hash_linear_probing; \
 85	else \
 86		echo "valgrindκ°€ μ„€μΉ˜λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€"; \
 87	fi
 88
 89# 도움말
 90help:
 91	@echo "ν•΄μ‹œ ν…Œμ΄λΈ” ν”„λ‘œμ νŠΈ Makefile"
 92	@echo ""
 93	@echo "μ‚¬μš© κ°€λŠ₯ν•œ νƒ€κ²Ÿ:"
 94	@echo "  make              - λͺ¨λ“  ν”„λ‘œκ·Έλž¨ 컴파일"
 95	@echo "  make debug        - 디버그 λͺ¨λ“œλ‘œ 컴파일"
 96	@echo "  make clean        - μƒμ„±λœ 파일 μ‚­μ œ"
 97	@echo "  make test         - λͺ¨λ“  ν”„λ‘œκ·Έλž¨ ν…ŒμŠ€νŠΈ μ‹€ν–‰"
 98	@echo "  make check        - μ½”λ“œ ν’ˆμ§ˆ 검사"
 99	@echo "  make memcheck     - λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 검사 (valgrind)"
100	@echo ""
101	@echo "κ°œλ³„ μ‹€ν–‰:"
102	@echo "  make run_functions  - ν•΄μ‹œ ν•¨μˆ˜ 비ꡐ μ‹€ν–‰"
103	@echo "  make run_chaining   - 체이닝 ν•΄μ‹œ ν…Œμ΄λΈ” μ‹€ν–‰"
104	@echo "  make run_probing    - μ„ ν˜• 탐사 ν•΄μ‹œ ν…Œμ΄λΈ” μ‹€ν–‰"
105	@echo "  make run_dict       - 사전 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰"
106
107.PHONY: all debug clean test check memcheck help run_functions run_chaining run_probing run_dict