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元起,快前往官網查看詳情吧
新聞標題:Linux/C++項目結構與編譯-創新互聯
網站鏈接:http://vcdvsql.cn/article44/cdeohe.html
成都網站建設公司_創新互聯,為您提供外貿網站建設、做網站、企業建站、App開發、軟件開發、電子商務
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯