最近刚刚接触到linux编程,之前没有任何基础,然后花了十天左右的时间将部门的一个windows下的中间件移植到linux平台了,我使用的是多目录下的makefile文件,接下来将具体的实现展示出来一共大家参照交流,linux版本为centOS6.9。
文件根目录下的文件:
include文件夹里面包含的是工程所需的一些头文件,lib库包含的是工程所需的一些库文件,这两个无需makefile文件,直接在其他的makefile中有检索这两个文件夹的操作。
这个是工程中除了include,lib外的目录结构:
根目录下的makefile文件:
#定义编译器
CC = g++
OUT_PUT := cpe_54_08
#将所有的.o文件都编译到OBJ文件夹下
OBJ :=cpe_54_08.o business.o mxdatabase.o socket.o thread.o tool.o work.o
#根目录
TOP_DIR := $(PWD)
OBJ_DIR := $(TOP_DIR)/obj
BIN_DIR := $(TOP_DIR)/CPE_54_08
SRC_BUSINESS_DIR := $(BIN_DIR )/Business
SRC_MXDATABASE_DIR := $(BIN_DIR )/MxDatabase
SRC_SOCKET_DIR := $(BIN_DIR )/Socket
SRC_THREAD_DIR := $(BIN_DIR )/Thread
SRC_TOOL_DIR := $(BIN_DIR )/Tool
SRC_WORK_DIR := $(BIN_DIR )/Work
SUB_DIR := CPE_54_08\
CPE_54_08/Business\
CPE_54_08/MXDatabase\
CPE_54_08/Socket\
CPE_54_08/Thread\
CPE_54_08/Tool\
CPE_54_08/Work
LIB_PATH := $(TOP_DIR)/lib
LINK_LIB := -L$(LIB_PATH) -lbsapi -L$(LIB_PATH) -lMxHandlePool -L$(LIB_PATH) -lServerData -L$(LIB_PATH) -lmxcomlib -L$(LIB_PATH) -lmxdbvar -L$(LIB_PATH) -lchen -luuid
export CC OBJ TOP_DIR OBJ_DIR BIN_DIR SRC_BUSINESS_DIR SRC_MXDATABASE_DIR\
SRC_SOCKET_DIR SRC_THREAD_DIR SRC_TOOL_DIR SRC_WORK_DIR
all:$(SUB_DIR) $(OUT_PUT)
$(SUB_DIR):ECHO
make -C $@
ECHO:
@echo $(SUB_DIR)
@echo begin compile
$(OUT_PUT):$(OBJ_DIR)/cpe_54_08.o $(OBJ_DIR)/dbsend.o $(OBJ_DIR)/localcontrollerstate.o $(OBJ_DIR)/mxdatabase.o $(OBJ_DIR)/optimalpathinformation.o $(OBJ_DIR)/stdafx.o $(OBJ_DIR)/tool.o\
$(OBJ_DIR)/localfault.o $(OBJ_DIR)/localcontrollerlist.o $(OBJ_DIR)/dbread.o $(OBJ_DIR)/container.o $(OBJ_DIR)/networkinformation.o $(OBJ_DIR)/managenetwork.o $(OBJ_DIR)/ycodec.o\
$(OBJ_DIR)/thread.o $(OBJ_DIR)/socket.o
g++ -o $(OUT_PUT) $(OBJ_DIR)/cpe_54_08.o $(OBJ_DIR)/dbsend.o $(OBJ_DIR)/localcontrollerstate.o $(OBJ_DIR)/mxdatabase.o $(OBJ_DIR)/optimalpathinformation.o $(OBJ_DIR)/stdafx.o $(OBJ_DIR)/tool.o\
$(OBJ_DIR)/localfault.o $(OBJ_DIR)/localcontrollerlist.o $(OBJ_DIR)/dbread.o $(OBJ_DIR)/container.o $(OBJ_DIR)/networkinformation.o $(OBJ_DIR)/managenetwork.o $(OBJ_DIR)/ycodec.o $(OBJ_DIR)/thread.o\
$(OBJ_DIR)/socket.o $(LINK_LIB) -lpthread
clean:
rm -rf $(OBJ_DIR)/*.o $(OUT_PUT)
OBJ文件中的makefile:
将工程中的所有cpp文件编译出来的 .o 文件都放在这个文件夹下。
$(BIN_DIR)/$(BIN):$(OBJ)
$(CC) $^ -o $@
CPE_54_08文件目录下的makefile:
INCLUDE_DIR := ../include ../
DIR := -I$(INCLUDE_DIR)
all:$(OBJ_DIR)/cpe_54_08.o $(OBJ_DIR)/stdafx.o
$(OBJ_DIR)/cpe_54_08.o:CPE_54_08.cpp
$(CC) -c $< $(DIR) -o $@ -std=c++0x
$(OBJ_DIR)/stdafx.o:stdafx.cpp
$(CC) -c $< $(DIR) -o $@
Business文件下的makefile:
INCLUDE_DIR := ../../inlcude ../Business
DIR = -I$(INCLUDE_DIR)
all:$(OBJ_DIR)/localcontrollerlist.o $(OBJ_DIR)/localcontrollerstate.o $(OBJ_DIR)/localfault.o $(OBJ_DIR)/managenetwork.o $(OBJ_DIR)/networkinformation.o $(OBJ_DIR)/optimalpathinformation.o
$(OBJ_DIR)/localcontrollerlist.o:LocalControllerList.cpp
$(CC) -c $< $(DIR) -o $@ -std=c++0x
$(OBJ_DIR)/localcontrollerstate.o:LocalControllerState.cpp
$(CC) -c $< $(DIR) -o $@ -std=c++0x
$(OBJ_DIR)/localfault.o:LocalFault.cpp
$(CC) -c $< $(DIR) -o $@ -std=c++0x
$(OBJ_DIR)/managenetwork.o:ManageNetwork.cpp
$(CC) -c $< $(DIR) -o $@ -std=c++0x
$(OBJ_DIR)/networkinformation.o:NetworkInformation.cpp
$(CC) -c $< $(DIR) -o $@ -std=c++0x
$(OBJ_DIR)/optimalpathinformation.o:OptimalPathInformation.cpp
$(CC) -c $< $(DIR) -o $@ -std=c++0x
MXDatabase文件下的makefile:
INCLUDE_DIR := ../MXDatabase ../../include
DIR := -I$(INCLUDE_DIR)
all:$(OBJ_DIR)/mxdatabase.o
$(OBJ_DIR)/mxdatabase.o:NetElementDb.cpp
$(CC) -c $< $(DIR) -o $@ -std=c++0x
Socket文件下的makefile:
INCLUDE_DIR := ../../include ../
DIR := -I$(INCLUDE_DIR)
all:$(OBJ_DIR)/socket.o
$(OBJ_DIR)/socket.o:UDP.cpp
$(CC) -c $< $(DIR) -o $@
Thread文件下的makefile:
INCLUDE_DIR := ../../include ../
DIR := -I$(INCLUDE_DIR)
all:$(OBJ_DIR)/thread.o
$(OBJ_DIR)/thread.o:Thread.cpp
$(CC) -c $< $(DIR) -o $@
Tool文件下的makefile:
INCLUDE_DIR := ../../include ../
DIR := -I$(INCLUDE_DIR)
all:$(OBJ_DIR)/tool.o $(OBJ_DIR)/ycodec.o
$(OBJ_DIR)/tool.o:Tools.cpp
$(CC) -c $< $(DIR) -o $@
$(OBJ_DIR)/ycodec.o:YCodec.cpp
$(CC) -c $< $(DIR) -o $@
Work文件下的makefile:
INCLUDE_DIR := ../../include ../
DIR := -I$(INCLUDE_DIR)
all:$(OBJ_DIR)/container.o $(OBJ_DIR)/dbsend.o $(OBJ_DIR)/dbread.o
$(OBJ_DIR)/container.o:Container.cpp
$(CC) -c $< $(DIR) -o $@
$(OBJ_DIR)/dbread.o:DbRead.cpp
$(CC) -c $< $(DIR) -o $@ -std=c++0x
$(OBJ_DIR)/dbsend.o:DbSend.cpp
$(CC) -c $< $(DIR) -o $@ -std=c++0x
最后成功生成可执行文件:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/luanfenlian0992/article/details/90172572
内容来源于网络,如有侵权,请联系作者删除!