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