Makefile 使用make更新函式庫檔案

2021-10-08 19:06:03 字數 1515 閱讀 6276

函式庫檔案也就是對object檔案(程式編譯的中間檔案)的打包檔案。

在unix下,一般是由命令"ar"來完成打包工作。

乙個函式庫檔案由多個檔案組成。你可以以如下格式指定函式庫檔案及其組成: 

archive

(member)

這個不是乙個命令,而乙個目標和依賴的定義。

一般來說,這種用法基本上就是為了"ar"命令來服務的。如:

foolib

(hack.o)

: hack.o

ar cr foolib hack.o

如果要指定多個member,那就以空格分開,如:

foolib

(hack.o kludge.o)

其等價於:

foolib

(hack.o)

foolib

(kludge.o)

你還可以使用shell的檔案萬用字元來定義,如:

foolib(*

.o)

當make搜尋乙個目標的隱含規則時,

乙個特殊的特性是,

如果這個目標是"a(m)"形式的,

其會把目標變成"(m)"。

於是,如果我們的成員是 "%.o"的模式定義,

並且如果我們使用"make foo.a(bar.o)"的形式呼叫makefile時,

隱含規則會去找"bar.o"的規則,

如果沒有定義bar.o的規則,

那麼內建隱含規則生效,

make會去找bar.c檔案來生成bar.o,

如果找得到的話,

make執行的命令大致如下:

cc -c bar.c -o bar.o

ar r foo.a bar.o

rm -f bar.o

還有乙個變數要注意的是"$%",

這是專屬函式庫檔案的自動化變數,

有關其說明請參見"自動化變數"一節。

你可以使用"字尾規則"和"隱含規則"來生成函式庫打包檔案,如: 

.c.a:

$(cc) $(cflags) $(cppflags) -c $< -o $*.o

$(ar) r $@ $*.o

$(rm) $*.o

其等效於:

(%.o) : %.c

$(cc) $(cflags) $(cppflags) -c $< -o $*.o

$(ar) r $@ $*.o

$(rm) $*.o

在進行函式庫打包檔案生成時,

請小心使用make的並行機制("-j"引數)。

如果多個ar命令在同一時間執行在同乙個函式庫打包檔案上,就很有可以損壞這個函式庫檔案。

所以,在make未來的版本中,應該提供一種機制來避免並行操作發生在函式打包檔案上。

但就目前而言,你還是應該不要盡量不要使用"-j"引數。

Makefile詳解 使用make更新函式庫檔案

使用make更新函式庫檔案 函式庫檔案也就是對object檔案 程式編譯的中間檔案 的打包檔案。在unix下,一般是由命令 ar 來完成打包工作。一 函式庫檔案的成員 乙個函式庫檔案由多個檔案組成。你可以以如下格式指定函式庫檔案及其組成 archive member 這個不是乙個命令,而乙個目標和依...

make命令使用 makefile編寫詳解

先來想像乙個案例,假設我的可執行檔案裡面包含了四個源 檔案,分別是 main.c haha.c sin value.c cos value.c 這四個檔案,這四個檔案的目的是 main.c 主要的目的是讓使用者輸入角度資料與呼叫其他三支副程式 haha.c 輸出一堆有的沒有的訊息而已 sin val...

(一)make之make和makefile初識

1.1 make 和makefile 1.1.1 make make 是乙個應用程式 1.1.2 makefile makefile是乙個描述檔案 1.1.3 makefile本質 makefile實際就是乙個指令碼程式,類似於shell指令碼。由於 塊中沒有make的,所以用bash來代替make...