1-
2- # Simple Makefile for Lab 1
1+ # Simple Makefile for Lab 1, Lab 2, Lab 3
32CC = gcc
43CFLAGS = -std=c11 -Wall -Wextra -Wpedantic -O2
5- LDFLAGS =
4+ LDFLAGS = -lm
65BUILD_DIR = bin
76SRC_DIR = src
87
9- PROGRAMS = $(BUILD_DIR ) /hello $(BUILD_DIR ) /calculator $(BUILD_DIR ) /formats
8+ PROGRAMS = $(BUILD_DIR ) /hello $(BUILD_DIR ) /calculator $(BUILD_DIR ) /formats \
9+ $(BUILD_DIR ) /lab2_1 $(BUILD_DIR ) /lab2_2 $(BUILD_DIR ) /lab2_3 \
10+ $(BUILD_DIR ) /lab3_task1 $(BUILD_DIR ) /lab3_task2 $(BUILD_DIR ) /lab3_task3
1011
11- all : $(BUILD_DIR ) /hello $(BUILD_DIR ) /calculator $(BUILD_DIR ) /formats \
12- $(BUILD_DIR)/lab2_1 $(BUILD_DIR)/lab2_2 $(BUILD_DIR)/lab2_3
12+ all : $(PROGRAMS )
1313
14+ # -----------------------
15+ # Lab 1
16+ # -----------------------
17+ lab1 : $(BUILD_DIR ) /hello $(BUILD_DIR ) /calculator $(BUILD_DIR ) /formats
1418
1519$(BUILD_DIR ) /hello : $(SRC_DIR ) /hello.c
1620 @mkdir -p $(BUILD_DIR )
@@ -24,42 +28,121 @@ $(BUILD_DIR)/formats: $(SRC_DIR)/format_specifiers.c
2428 @mkdir -p $(BUILD_DIR )
2529 $(CC ) $(CFLAGS ) $< -o $@ $(LDFLAGS )
2630
31+ # -----------------------
32+ # Lab 2
33+ # -----------------------
34+ lab2 : $(BUILD_DIR ) /lab2_1 $(BUILD_DIR ) /lab2_2 $(BUILD_DIR ) /lab2_3
35+
2736$(BUILD_DIR ) /lab2_1 : $(SRC_DIR ) /lab2_1.c
2837 @mkdir -p $(BUILD_DIR )
29- $(CC ) $(CFLAGS ) $< -o $@
38+ $(CC ) $(CFLAGS ) $< -o $@ $( LDFLAGS )
3039
3140$(BUILD_DIR ) /lab2_2 : $(SRC_DIR ) /lab2_2.c
3241 @mkdir -p $(BUILD_DIR )
33- $(CC ) $(CFLAGS ) $< -o $@
42+ $(CC ) $(CFLAGS ) $< -o $@ $( LDFLAGS )
3443
3544$(BUILD_DIR ) /lab2_3 : $(SRC_DIR ) /lab2_3.c
3645 @mkdir -p $(BUILD_DIR )
37- $(CC ) $(CFLAGS ) $< -o $@
46+ $(CC ) $(CFLAGS ) $< -o $@ $(LDFLAGS )
47+
48+ # -----------------------
49+ # Lab 3
50+ # -----------------------
51+ lab3 : $(BUILD_DIR ) /lab3_task1 $(BUILD_DIR ) /lab3_task2 $(BUILD_DIR ) /lab3_task3
52+
53+ $(BUILD_DIR ) /lab3_task1 : $(SRC_DIR ) /lab3_task1.c
54+ @mkdir -p $(BUILD_DIR )
55+ $(CC ) $(CFLAGS ) $< -o $@ $(LDFLAGS )
3856
39- hello : $(BUILD_DIR ) /hello
40- calculator : $(BUILD_DIR ) /calculator
41- formats : $(BUILD_DIR ) /formats
42- lab2_1 : $(BUILD_DIR ) /lab2_1
43- lab2_2 : $(BUILD_DIR ) /lab2_2
44- lab2_3 : $(BUILD_DIR ) /lab2_3
57+ $(BUILD_DIR ) /lab3_task2 : $(SRC_DIR ) /lab3_task2.c
58+ @mkdir -p $(BUILD_DIR )
59+ $(CC ) $(CFLAGS ) $< -o $@ $(LDFLAGS )
60+
61+ $(BUILD_DIR ) /lab3_task3 : $(SRC_DIR ) /lab3_task3.c
62+ @mkdir -p $(BUILD_DIR )
63+ $(CC ) $(CFLAGS ) $< -o $@ $(LDFLAGS )
4564
46- run-hello : hello
65+ # -----------------------
66+ # Run targets
67+ # -----------------------
68+ run-hello : $(BUILD_DIR ) /hello
4769 ./$(BUILD_DIR ) /hello
4870
49- run-calculator : calculator
71+ run-calculator : $( BUILD_DIR ) / calculator
5072 ./$(BUILD_DIR ) /calculator
5173
52- run-formats : formats
74+ run-formats : $( BUILD_DIR ) / formats
5375 ./$(BUILD_DIR ) /formats
5476
55- run-lab2_1 : lab2_1
77+ run-lab2_1 : $( BUILD_DIR ) / lab2_1
5678 ./$(BUILD_DIR ) /lab2_1
5779
58- run-lab2_2 : lab2_2
80+ run-lab2_2 : $( BUILD_DIR ) / lab2_2
5981 ./$(BUILD_DIR ) /lab2_2
6082
61- run-lab2_3 : lab2_3
83+ run-lab2_3 : $( BUILD_DIR ) / lab2_3
6284 ./$(BUILD_DIR ) /lab2_3
6385
86+ run-lab3_task1 : $(BUILD_DIR ) /lab3_task1
87+ ./$(BUILD_DIR ) /lab3_task1
88+
89+ run-lab3_task2 : $(BUILD_DIR ) /lab3_task2
90+ ./$(BUILD_DIR ) /lab3_task2
91+
92+ run-lab3_task3 : $(BUILD_DIR ) /lab3_task3
93+ ./$(BUILD_DIR ) /lab3_task3
94+
95+ # Run all tasks in Lab 2
96+ run-lab2 : lab2
97+ ./$(BUILD_DIR ) /lab2_1
98+ ./$(BUILD_DIR ) /lab2_2
99+ ./$(BUILD_DIR ) /lab2_3
100+
101+ # Run all tasks in Lab 3
102+ run-lab3 : lab3
103+ ./$(BUILD_DIR ) /lab3_task1
104+ ./$(BUILD_DIR ) /lab3_task2
105+ ./$(BUILD_DIR ) /lab3_task3
106+
107+ # Run all labs (Lab 1 → Lab 2 → Lab 3)
108+ run-all : all
109+ ./$(BUILD_DIR ) /hello
110+ ./$(BUILD_DIR ) /calculator
111+ ./$(BUILD_DIR ) /formats
112+ ./$(BUILD_DIR ) /lab2_1
113+ ./$(BUILD_DIR ) /lab2_2
114+ ./$(BUILD_DIR ) /lab2_3
115+ ./$(BUILD_DIR ) /lab3_task1
116+ ./$(BUILD_DIR ) /lab3_task2
117+ ./$(BUILD_DIR ) /lab3_task3
118+
119+ # -----------------------
120+ # Debug build
121+ # -----------------------
122+ debug :
123+ $(MAKE ) clean
124+ $(MAKE ) CFLAGS=" -std=c11 -Wall -Wextra -Wpedantic -g" all
125+
126+ # -----------------------
127+ # Help
128+ # -----------------------
129+ help :
130+ @echo " Available make targets:"
131+ @echo " make all - Build all labs (with optimization)"
132+ @echo " make lab1 - Build Lab 1 programs"
133+ @echo " make lab2 - Build Lab 2 programs"
134+ @echo " make lab3 - Build Lab 3 programs"
135+ @echo " make run-hello - Run Lab 1 hello program"
136+ @echo " make run-calculator - Run Lab 1 calculator"
137+ @echo " make run-formats - Run Lab 1 format specifiers"
138+ @echo " make run-lab2 - Run all Lab 2 programs"
139+ @echo " make run-lab3 - Run all Lab 3 programs"
140+ @echo " make run-all - Run all labs (1, 2, and 3)"
141+ @echo " make debug - Rebuild all with debugging (-g)"
142+ @echo " make clean - Remove build artifacts"
143+
144+ # -----------------------
145+ # Cleanup
146+ # -----------------------
64147clean :
65148 rm -rf $(BUILD_DIR ) /* .o $(PROGRAMS )
0 commit comments