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はC 99に組み込まれたinttypesヘッダファイルを導入し,intの標準長を定義する.thrift0.8加入する必要がある、thrift 0.7いいえ.
-DHAVE_NETINET_IN_Hはnetinetヘッダファイルを導入し,インターネットアドレス族を解決する.thrift0.8加入する必要がある、thrift 0.7いいえ.
-Wallは一般的にこのオプションを使用して、GCCが提供できるすべての有用な警告を発行することができます.
-gデバッグオプションは、コンパイラのみで、コンパイル時にデバッグ情報が生成されます(デフォルトはg 2).
-oターゲット名、「community_service_cpp」コンパイル後の実行可能ファイル名を設定します.
$(I_REF)ファイルパス
-lリンクライブラリ名lib*.a.例えば、-lthriftリンクthriftの.aファイル、フルネームlibthrift.a.