C++ makefile 学习

项目所在路径
/ide/c_cpp/workspace/community_cpp

项目目录结构
-Debug
-src
-thrift
-thrift_cpp
Makefile

BASE_DIR = /ide/c_cpp/workspace/community_cpp
SRC_DIR = "$(BASE_DIR)/src"
THRIFT_GEN_DIR = "$(BASE_DIR)/thrift_cpp"

THRIFT_DIR = "/usr/local/include/thrift"
MONGO_DIR = "/opt/include"


I_REF = -I$(SRC_DIR) -I$(THRIFT_GEN_DIR) -I$(THRIFT_DIR) -I$(MONGO_DIR)

SUBDIR = src
SUBSRC = $(shell find $(SUBDIR) -mindepth 2 -name '*.cpp')
SUBSRC_ROOT = $(shell find $(SUBDIR) -maxdepth 1 -name '*.cpp')

THRIFT_GEN_CPP_SRC = $(shell find thrift_cpp -name '*.cpp')

default: server
server: src/community_cpp.cpp
	g++ -DHAVE_INTTYPES_H -DHAVE_NETINET_IN_H -Wall -g -o "community_service_cpp" $(I_REF) $(SUBSRC) $(SUBSRC_ROOT) $(THRIFT_GEN_CPP_SRC) -lthrift -lthriftnb -levent -lboost_thread-mt -lmongoclient -lboost_filesystem


解释
line 1: 定义项目路径
line 2: 定义源文件所在路径
line 3: 定义项目用到的thrift生成的源文件路径。

line 5: 定义thrift的安装路径。
line 6: 定义MongoDB的安装路径。


line 9: 根据路径,-I(即include)头文件。

line 11:定义所有头文件的路径。
line 12:使用shell脚本,从SUBSRC开始,寻找目录深度为2的所有后缀名为cpp的文件。
line 13:使用shell脚本,从SUBSRC开始,寻找目录深度为1的所有后缀名为cpp的文件。

line 15:使用shell脚本,从thrift_cpp开始,寻找thrift生成的所有后缀名为cpp的文件。

line 17:定义server
line 18:定义main方法所在cpp文件
line 19:g++开始编译cpp文件。
g++ 详解
-DHAVE_INTTYPES_H 引入C99加入的inttypes头文件,定义一些int的标准长度。thrift0.8需要加入,thrift0.7不用。
-DHAVE_NETINET_IN_H 引入netinet头文件,解决互联网地址族。thrift0.8需要加入,thrift0.7不用。
-Wall 一般使用该选项,允许发出GCC能够提供的所有有用的警告。
-g 调试选项,只是编译器,在编译的时候,产生调试信息,(默认为g2)。
-o 制定目标名称, "community_service_cpp" 编译后的可执行文件名。
$(I_REF) 文件路径
-l 链接库名 lib*.a。例如:-lthrift 链接thrift的.a文件,全名为libthrift.a。

你可能感兴趣的:(C++,学习,makeefile)