-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
78 lines (63 loc) · 2.19 KB
/
Makefile
File metadata and controls
78 lines (63 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# Compiler and flags
CXX = g++
CXXFLAGS = -Wall -Wextra -std=c++11
# Target library and executable names
STATIC_LIB = librailway.a
SHARED_LIB = librailway.so
EXEC = railway_app
ADVANCED_EXEC = advanced_railway_app
TEST_EXEC = railway_test
# Directories for source, object files, and build output
SRC_DIR = src
OBJ_DIR = build/obj
BIN_DIR = build/bin
TEST_DIR = test
# Source and object files (excluding main files)
SRCS = $(filter-out $(SRC_DIR)/main.cpp $(SRC_DIR)/advanced_main.cpp, $(wildcard $(SRC_DIR)/*.cpp))
OBJS = $(SRCS:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)
# Test files
TEST_SRCS = $(TEST_DIR)/railway_test.cpp
TEST_OBJS = $(TEST_SRCS:$(TEST_DIR)/%.cpp=$(OBJ_DIR)/%.o)
# Main source files
MAIN = $(SRC_DIR)/main.cpp
ADVANCED_MAIN = $(SRC_DIR)/advanced_main.cpp
# Default target
all: $(EXEC) $(ADVANCED_EXEC) $(TEST_EXEC)
# Build the static library
$(STATIC_LIB): $(OBJS)
@echo "Creating static library: $(STATIC_LIB)"
ar rcs $@ $^
# Build the shared library
$(SHARED_LIB): $(OBJS)
@echo "Creating shared library: $(SHARED_LIB)"
$(CXX) -fPIC -shared -o $@ $^
# Compile main program with static library
$(EXEC): $(MAIN) $(STATIC_LIB)
@echo "Building executable: $(EXEC)"
@mkdir -p $(BIN_DIR)
$(CXX) $(CXXFLAGS) -o $(BIN_DIR)/$@ $(MAIN) -L. -lrailway
# Compile advanced main program with static library
$(ADVANCED_EXEC): $(ADVANCED_MAIN) $(STATIC_LIB)
@echo "Building advanced executable: $(ADVANCED_EXEC)"
@mkdir -p $(BIN_DIR)
$(CXX) $(CXXFLAGS) -o $(BIN_DIR)/$@ $(ADVANCED_MAIN) -L. -lrailway
# Compile test executable
$(TEST_EXEC): $(TEST_OBJS) $(STATIC_LIB)
@echo "Building test executable: $(TEST_EXEC)"
@mkdir -p $(BIN_DIR)
$(CXX) $(CXXFLAGS) -o $(BIN_DIR)/$@ $(TEST_OBJS) -L. -lrailway
# Clean up object files, library files, and executable
clean:
@echo "Cleaning up..."
rm -rf $(OBJ_DIR) $(STATIC_LIB) $(SHARED_LIB) $(BIN_DIR)/$(EXEC) $(BIN_DIR)/$(ADVANCED_EXEC) $(BIN_DIR)/$(TEST_EXEC)
# Pattern rule for compiling .cpp files to .o files
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
@mkdir -p $(OBJ_DIR)
@echo "Compiling $<..."
$(CXX) $(CXXFLAGS) -c $< -o $@
$(OBJ_DIR)/%.o: $(TEST_DIR)/%.cpp
@mkdir -p $(OBJ_DIR)
@echo "Compiling test $<..."
$(CXX) $(CXXFLAGS) -c $< -o $@
# Phony targets
.PHONY: all clean