zcm@vm:~/Documents/makefile/project$ ll
total 40
drwxrwxr-x 9 zcm zcm 4096 11月 29 18:53 ./
drwxrwxr-x 3 zcm zcm 4096 11月 29 16:59 ../
drwxrwxr-x 2 zcm zcm 4096 11月 30 20:34 build/
drwxrwxr-x 2 zcm zcm 4096 11月 29 17:03 doc/
drwxrwxr-x 4 zcm zcm 4096 11月 30 20:31 include/
-rw-rw-r-- 1 zcm zcm 208 11月 30 20:21 Makefile
drwxrwxr-x 2 zcm zcm 4096 11月 29 17:01 res/
drwxrwxr-x 6 zcm zcm 4096 11月 30 20:34 sim_muduo_lib/
drwxrwxr-x 4 zcm zcm 4096 11月 29 19:04 src/
drwxrwxr-x 2 zcm zcm 4096 11月 29 17:02 tools/
zcm@vm:~/Documents/makefile/project$ tree
.
├── build # build 可运行目标文件产出目录
│ ├── EchoClient
│ └── EchoServer
├── doc # doc 项目记录或其他文件目录
├── include # include 项目头文件目录,可分为module1 module2...
│ ├── Client_include
│ │ └── EchoClient.h
│ └── Server_include
│ └── EchoServer.h
├── res # 资源文件目录
├── sim_muduo_lib # 项目依赖库目录
│ ├── lib # 库(静态库)发布目录,包括库文件与头文件
│ │ ├── Atomic.h
│ │ ├── Buffer.h
│ │ ├── ConnectSocket.h
│ │ ├── InetAddress.h
│ │ ├── libsim_muduo.a
│ │ ├── LinkOwner.h
│ │ ├── ...
│ │ └── Timestamp.h
│ ├── obj # 库(静态库)产出目录,产出中间文件
│ │ ├── Buffer
│ │ ├── ConnectSocket.o
│ │ ├── EpollAdpt.o
│ │ ├── InetAddress.o
│ │ ├── libsim_muduo.a
│ │ ├── ListenSocket.o
│ │ └── Logging.o
│ ├── prih # 头文件目录
│ │ ├── Atomic.h
│ │ ├── ConnectSocket.h
│ │ ├── ...
│ │ └── Poller.h
│ ├── pubh # 头文件目录
│ │ ├── Buffer.h
│ │ ├── EventLoop.h
│ │ ├── ...
│ │ └── Timestamp.h
│ ├── Buffer.cpp # # # # # #
│ ├── ConnectSocket.cpp
│ ├── EpollAdpt.cpp
│ ├── EventLoop.cpp # 源文件
│ ├── ListenSocket.cpp
│ ├── Logging.cpp
│ ├── ... # # # # # #
│ └── makefile # 库 Makefile
├── src # 项目源文件目录,可分为module1 module2...
│ ├── Client_src
│ │ ├── EchoClient.cpp
│ │ ├── EchoClient_main.cpp
│ │ └── Makefile # module1 Makefile
│ └── Server_src
│ ├── EchoServer.cpp
│ ├── EchoServer_main.cpp
│ └── Makefile # module2 Makefile
├── tool # 工具文件目录
└── Makefile # 项目总体Makefile
编译(Makefile)说明
makefile中符号说明# $@ 表示目标文件
# $^ 表示所有的依赖文件
# $< 表示第一个依赖文件
# $? 表示比目标还要新的依赖文件列表
# $(wildcard pubh/*.h prih/*h) 明确表明通配符
# $(patsubst %.cpp,%.o,$(LIB_SRC)) 替换 %.cpp to %.o
# $(addprefix $(OBJ_DIR)/, $(OBJS)) 加前缀
# INC_DIR = -I$(BASE_DIR)/include/Server_include -I$(BASE_DIR)/sim_muduo_lib/lib 找头文件的地址 "-I"
# CLIBS = -L$(LIB_DIR) -lsim_muduo -pthread 找依赖库的地址"-L"
项目总体Makefile# 进入目录,编译,(产出)
# clean
all:
cd sim_muduo_lib && make && make output
cd src/Server_src && make
cd src/Client_src && make
clean:
cd sim_muduo_lib && make clean
cd src/Server_src && make clean
cd src/Client_src && make clean
依赖库Makefile.SUFFIXES: .sh .h .c .cc .cpp
# # # # # # 编译静态库命令,编译产出命令 # # # # # #
AR = ar
AR_FLAGS = crs
CXX = g++
CXXFLAGS = -std=c++11 -ggdb3 -Wall -DDEBUG
# # # # # # 准备地址变量 # # # # # #
# -Ipubh -I the path of *.h
INC_DIR = -Ipubh -Iprih
OBJ_DIR = obj
OUT_DIR = lib
# # # # # # 准备 *.h *.cpp *.o *.a 变量 # # # # # #
INCLUDE=$(wildcard pubh/*.h prih/*h)
LIB_SRC=$(wildcard *.cpp)
OBJS=$(patsubst %.cpp,%.o,$(LIB_SRC))
MUDUOLIB = $(OBJ_DIR)/libsim_muduo.a
# # # # # # make # # # # # #
all: obj_dir objs muduolib
obj_dir objs muduolib: $(OBJ_DIR) $(OBJS) $(MUDUOLIB)
# 链接 由*.o ->MUDUOLIB
$(MUDUOLIB):$(addprefix $(OBJ_DIR)/, $(OBJS))
$(AR) $(AR_FLAGS) $@ $^
# 编译 由*.cpp ->*.o one by one
$(OBJS):%.o:%.cpp
$(CXX) -c $(CXXFLAGS) $(INC_DIR) $< -o $(OBJ_DIR)/$@
# 生成OBJ_DIR
$(OBJ_DIR):
@-mkdir -p $(OBJ_DIR)
# # # # # # make output # # # # # #
.PHONY:output
output:
@-mkdir -p $(OUT_DIR)
cp $(MUDUOLIB) $(OUT_DIR)
cp $(INCLUDE) $(OUT_DIR)
# # # # # # make clean # # # # # #
.PHONY:clean
clean:
@-rm -rf $(OBJ_DIR)
@-rm -rf $(OUT_DIR)
modules Makefile.SUFFIXES: .sh .h .c .cc .cpp
# # # # # # 编译静态库命令,编译产出命令 # # # # # #
AR = ar
AR_FLAGS = crs
CXX = g++
CXXFLAGS = -std=c++11 -ggdb3 -Wall -Werror
# # # # # # 准备变量 # # # # # #
# base地址
BASE_DIR = ../..
# 产出地址
BUILD_DIR = $(BASE_DIR)/build
# 头文件地址
INC_DIR = -I$(BASE_DIR)/include/Server_include -I$(BASE_DIR)/sim_muduo_lib/lib
# 依赖库地址
LIB_DIR = $(BASE_DIR)/sim_muduo_lib/lib
# 依赖库地址与名称
CLIBS = -L$(LIB_DIR) -lsim_muduo -pthread
# 产出
BIN = $(BUILD_DIR)/EchoServer
# *.cpp
SERVER_SRCS = $(wildcard *.cpp)
# # # # # # make # # # # # #
all: bin
bin :$(BIN)
$(BIN):$(SERVER_SRCS)
$(CXX) $(CXXFLAGS) $(INC_DIR) -o $@ $^ $(CLIBS)
# # # # # # make clean # # # # # #
clean:
@-rm -rf $(BIN)
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
创新互联建站自2013年起,是专业互联网技术服务公司,拥有项目成都网站设计、网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元泽州做网站,已为上家服务,为泽州各地企业和个人服务,联系电话:18982081108