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
							 |