Linux編譯 a模板

2021-08-15 17:55:32 字數 2229 閱讀 1430

# 目標檔名

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的容器類。直...