75 lines
1.7 KiB
Makefile
75 lines
1.7 KiB
Makefile
|
# 编译器和标志
|
||
|
CXX = g++
|
||
|
CXXFLAGS = -Wall -std=c++17 -I./ -I./3rd -I./net -I./ofen/include -I./util # 添加 3rd 目录的头文件路径
|
||
|
|
||
|
# 目录
|
||
|
SRCDIR = src
|
||
|
OBJDIR = obj
|
||
|
BINDIR = bin
|
||
|
LIBDIR = lib
|
||
|
THIRDDIR = 3rd
|
||
|
|
||
|
# 库路径和库文件
|
||
|
LIB_PATHS = -L$(LIBDIR) -L$(THIRDDIR)/lib # 假设 3rd 下有一些库文件
|
||
|
LIBS = -lws2_32 -lwsock32
|
||
|
|
||
|
# 源文件
|
||
|
UTIL_SRC = $(wildcard util/*.cpp)
|
||
|
NET_SRC = $(wildcard net/*.cpp)
|
||
|
OFEN_SRC = $(wildcard ofen/src/*.cpp)
|
||
|
CLIENT_SRC = $(wildcard client/*.cpp)
|
||
|
SERVER_SRC = $(wildcard server/*.cpp)
|
||
|
|
||
|
# 对应的目标文件
|
||
|
UTIL_OBJ = $(UTIL_SRC:%.cpp=$(OBJDIR)/%.o)
|
||
|
NET_OBJ = $(NET_SRC:%.cpp=$(OBJDIR)/%.o)
|
||
|
OFEN_OBJ = $(OFEN_SRC:%.cpp=$(OBJDIR)/%.o)
|
||
|
CLIENT_OBJ = $(CLIENT_SRC:%.cpp=$(OBJDIR)/%.o)
|
||
|
SERVER_OBJ = $(SERVER_SRC:%.cpp=$(OBJDIR)/%.o)
|
||
|
|
||
|
# 库文件
|
||
|
UTIL_LIB = $(LIBDIR)/libutil.a
|
||
|
NET_LIB = $(LIBDIR)/libnet.a
|
||
|
OFEN_LIB = $(LIBDIR)/libofen.a
|
||
|
|
||
|
# 可执行文件
|
||
|
CLIENT_BIN = $(BINDIR)/client
|
||
|
SERVER_BIN = $(BINDIR)/server
|
||
|
|
||
|
# 生成的目标文件夹
|
||
|
$(shell mkdir -p $(OBJDIR) $(BINDIR) $(LIBDIR))
|
||
|
|
||
|
# 默认目标:编译所有目标
|
||
|
all: $(CLIENT_BIN) $(SERVER_BIN)
|
||
|
|
||
|
# 生成 util 库
|
||
|
$(UTIL_LIB): $(UTIL_OBJ)
|
||
|
ar rcs $@ $^
|
||
|
|
||
|
# 生成 net 库
|
||
|
$(NET_LIB): $(NET_OBJ)
|
||
|
ar rcs $@ $^
|
||
|
|
||
|
# 生成 ofen 库
|
||
|
$(OFEN_LIB): $(OFEN_OBJ)
|
||
|
ar rcs $@ $^
|
||
|
|
||
|
# 生成 client 可执行文件
|
||
|
$(CLIENT_BIN): $(CLIENT_OBJ) $(UTIL_LIB) $(NET_LIB) $(OFEN_LIB)
|
||
|
$(CXX) -o $@ $^ $(CXXFLAGS) $(LIB_PATHS) $(LIBS)
|
||
|
|
||
|
# 生成 server 可执行文件
|
||
|
$(SERVER_BIN): $(SERVER_OBJ) $(UTIL_LIB) $(NET_LIB) $(OFEN_LIB)
|
||
|
$(CXX) -o $@ $^ $(CXXFLAGS) $(LIB_PATHS) $(LIBS)
|
||
|
|
||
|
# 编译 .cpp 文件为 .o 文件
|
||
|
$(OBJDIR)/%.o: %.cpp
|
||
|
$(CXX) -c -o $@ $< $(CXXFLAGS)
|
||
|
|
||
|
# 清理生成的文件
|
||
|
clean:
|
||
|
rm -rf $(OBJDIR) $(BINDIR) $(LIBDIR)
|
||
|
|
||
|
# 只编译可执行文件
|
||
|
.PHONY: all clean
|