# 目標檔名
target := libmymath.a
# 生成的目標所放置的位置
target_path :=../
# 編譯引數
cc := g++
# 建立靜態庫使用ar命令
ar := ar
# ranlib對靜態庫符號索引表進行更新
ranlib = ranlib
# 依賴庫名稱,如:libs=-lpthread
libs :=
# 指定依賴庫位置,多個引用庫之間以空格分開, 如: ldflags=-l/usr/lib -l/***/lib
ldflags :=
# 向**提供巨集定義, 一般**這樣使用:
# #ifdef ***x
# ...
# #endif
# 巨集定義有2種方式: (1) -d define1 (2) -d define2=1000
# 多個巨集定義以空格分開, 如: defines=-dgt60 -disandroid=1
defines :=
# 依賴標頭檔案路徑(當前路徑: i.), 多個路徑以空格分開, 如: includes=-i/usr/include -i/path/include
includes := -i.
# -o0:表示編譯時沒有優化
# -o1:表示編譯時使用預設優化
# -o2:表示編譯時使用二級優化
# -o3:表示編譯時使用最高端優化
# -os: 優化**大小,其使能了-o2的所有選項,相當於-o2.5
cflags := -g -wall -o3 -std=c++11 $(defines) $(includes)
cxxflags:= $(cflags)
# vpath告訴編譯器當前目錄和指定目錄都按照當前規則編譯
vpath = . ./subdir
# 自動查詢所有.c和.cpp檔案,並將目標定義為同名.o檔案
# wildcard得到當前目錄(./)和其子目錄下的所有字尾為.cpp檔案
# 如果還有目錄則再增加乙個wildcard, 比如當前目錄下還有乙個子目錄***,如: source := $(wildcard *.cpp) $(wildcard ***/*.cpp)
source := $(wildcard *.cpp) $(wildcard subdir/*.cpp)
# notdir去除路徑得到檔名
src_withoutdir:= $(notdir $(source))
# patsubst把.c及.cpp替換成同名.o, 如果手動寫.o則不需要source, 如: objs = mymath.o testlib.o
objs := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(src_withoutdir)))
# 顯示source, src_withoutdir, objs的值
#out:
# @echo $(source)
# @echo $(src_withoutdir)
# @echo $(objs)
# -shared: 編譯成動態庫
$(target) : $(objs)
# ar命令用來將若.o檔案打包成庫檔案,c r v u分別是ar命令的三個引數,
# cr: 建立指定的.a檔案(如果不存在),並將.o檔案追加到末尾
# v: 讓ar命令列印更多提示資訊
# u: 如果檔案不比當前更新則不替換
rm -f $@
$(ar) crv $@ $(objs)
$(ranlib) $(target)
ifeq ($(target_path),)
# 如果未設定目標路徑則不拷貝(目標所在路徑為當前目錄)
else
# 把.so檔案拷貝到指定目錄種
cp $(target) $(target_path)
endif
%.o : %.cpp
# -fpic: 告訴編譯器產生與位置無關**(position-independent code)
$(cc) $(cxxflags) -c $< -o $@ $(ldflags) $(libs)
.phony : clean
clean:
rm -f *.o
rm -f $(target)
Linux編譯 so模板
目標檔名 target libmymath.so 生成的目標所放置的位置 target path 編譯引數 cc g 依賴庫名稱,如 libs lpthread libs 指定依賴庫位置,多個引用庫之間以空格分開,如 ldflags l usr lib l lib ldflags 向 提供巨集定義,...
Linux驅動模組編譯模板
hello.c檔案 include include static int hello init void static void hello exit void module init hello init module exit hello exit module author vedic mod...
c 模板編譯
如何組織編寫模板程式 前言 常遇到詢問使用模板到底是否容易的問題,我的回答是 模板的使用是容易的,但組織編寫卻不容易 看看我們幾乎每天都能遇到的模板類吧,如stl,atl,wtl,以及boost的模板類,都能體會到這樣的滋味 介面簡單,操作複雜。我在5年前開始使用模板,那時我看到了mfc的容器類。直...