Linux/C++项目结构与编译-创新互联

项目结构与说明
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
新闻标题:Linux/C++项目结构与编译-创新互联
新闻来源:http://scyanting.com/article/cdeohe.html