1. 程式人生 > >makefile詳解 使用make更新函式庫檔案(結束) 二十六

makefile詳解 使用make更新函式庫檔案(結束) 二十六

使用make更新函式庫檔案
———————————

函式庫檔案也就是對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 
[email protected]
 $*.o
            $(RM) $*.o

其等效於:

    (%.o) : %.c
            $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o
            $(AR) r [email protected] $*.o
            $(RM) $*.o


四、注意事項

在進行函式庫打包檔案生成時,請小心使用make的並行機制("-j"引數)。如果多個ar命令在同一時間執行在同一個函式庫打包檔案上,就很有可以損壞這個函式庫檔案。所以,在make未來的版本中,應該提供一種機制來避免並行操作發生在函式打包檔案上。

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


最最後,我還想介紹一下make程式的設計開發者。

 

首當其衝的是: Richard Stallman  

開源軟體的領袖和先驅,從來沒有領過一天工資,從來沒有使用過Windows作業系統。對於他的事蹟和他的軟體以及他的思想,我無需說過多的話,相信大家對這個人並不比我陌生,這是他的主頁:http://www.stallman.org/ 。這裡只貼上一張他的近照:






 gunguymadman 回覆於:2004-09-16 12:27:15

第二位是:Roland McGrath  

個人主頁是:http://www.frob.com/~roland/ ,下面是他的一些事蹟:

1)  合作編寫了並維護GNU make。

2)  和Thomas Bushnell一同編寫了GNU Hurd。

3)  編寫並維護著GNU C library。 

4)  合作編寫並維護著部分的GNU Emacs。 

 

在此,向這兩位開源專案的鬥士致以最真切的敬意。

相關推薦

makefile 使用make更新函式檔案(結束)

使用make更新函式庫檔案 ——————————— 函式庫檔案也就是對Object檔案(程式編譯的中間檔案)的打包檔案。在Unix下,一般是由命令"ar"來完成打包工作。 一、函式庫檔案的成員 一個函式庫檔案由多個檔案組成。你可以以如下格式指定函式庫檔案及其組成:     archive(member) 這個

跟我一起寫Makefile:使用make更新函式檔案

轉載: 使用make更新函式庫檔案 函式庫檔案也就是對Object檔案(程式編譯的中間檔案)的打包檔案。在Unix下,一般是由命令"ar"來完成打包工作。 函式庫檔案的成員 一個函式庫檔案由多個檔案組成。你可以以如下格式指定函式庫檔案及其組成: archi

makefile make 的執行 十三

make 的執行 —————— 一般來說,最簡單的就是直接在命令列下輸入make命令,make命令會找當前目錄的makefile來執行,一切都是自動的。但也有時你也許只想讓make重編譯某些檔案,而不是整個工程,而又有的時候你有幾套編譯規則,你想在不同的時候使用不同的編譯規則,等等。本章節就是講述如何使用ma

MAKEFILE 包含內容 包含其他檔案

一、Makefile裡有什麼? Makefile裡主要包含了五個東西:顯式規則、隱晦規則、變數定義、檔案指示和註釋。 1、顯式規則。顯式規則說明了,如何生成一個或多的的目標檔案。這是由Makefile的書寫者明顯指出,要生成的檔案,檔案的依賴檔案,生成的命令。 2、隱晦規則。由於我們的make有自動推導的功能

Linux程序上下文切換過程context_switch--Linux程序的管理與排程(一)

1 前景回顧 1.1 Linux的排程器組成 2個排程器 可以用兩種方法來啟用排程 一種是直接的, 比如程序打算睡眠或出於其他原因放棄CPU 另一種是通過週期性的機制, 以固定的頻率執行, 不時的檢測是否有必要 因此當前linux的排程程式由兩個排程器組成:主排程器,週期性排程器(兩者

MySQL數據8()存儲過程

com 直接 形參 基本上 一次 cal inf 分享 技術分享 存儲過程 存儲過程的概念 存儲過程(stored procedure)是在大型數據庫系統中,一組為了完成特定功能的SQL語句集,存儲在數據庫中,經過第一次編譯後再次調用不需要再次編譯,(效率比較高)用戶通

makemakefile 函式檔案

一、簡單的靜態庫書寫編譯和測試 檔案目錄如下所示: . ├── Makefile ├── MakefileTest ├── include.c ├── include.h └── main.c 0 directories, 5 files 其中main.c函式裡面會呼叫includ

makefile 函式 foreach if call origin shell 控制make函式

四、foreach 函式   foreach函式和別的函式非常的不一樣。因為這個函式是用來做迴圈用的,Makefile中的foreach函式幾乎是仿照於Unix標準Shell(/bin/sh)中的for語句,或是C-Shell(/bin/csh)中的foreach語句而構建的。它的語法是:       $(f

開啟檔案open()函式的使用方法--C語言函式

標頭檔案:#include <sys/types.h>    #include <sys/stat.h>    #include <fcntl.h>定義函式:    int open(const char * pathname, int

makefile 函式 字串 檔名

在Makefile中可以使用函式來處理變數,從而讓我們的命令或是規則更為的靈活和具有智慧。make所支援的函式也不算很多,不過已經足夠我們的操作了。函式呼叫後,函式的返回值可以當做變數來使用。 一、函式的呼叫語法 函式呼叫,很像變數的使用,也是以“$”來標識的,其語法如下:     $(<functio

MVC之Ajax.BeginForm使用更新列表

分布 use html text col 返回 uno pts scripts 1.首先,請在配置文件設置如下:(該項默認都存在且為true) <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 2

mongo 3.4分片集群系列之配置數據

初始化 kpi 更新 並且 color tag 成員 gin sha 這個系列大致想跟大家分享以下篇章(我會持續更新的↖(^ω^)↗): 1、mongo 3.4分片集群系列之一:淺談分片集群 2、mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3、mongo

makefile

makefile原文鏈接:https://blog.csdn.net/qq_38646470/article/details/79917494專欄鏈接:https://blog.csdn.net/column/details/20028.html    或許很多Wino

一篇文章NOsql數據Redis

iss mem 新浪 簡單 加載 release 單線程 高速 etc 一圖詳解DB的分支產品osql數據庫介紹 是一種非關系型數據庫服務,它能解決常規數據庫的並發能力,比如傳統的數據庫的IO與性能的瓶頸,同樣它是關系型數據庫的一個補充,有著比較好的高效率與高性能。 專註於

多級緩存設計 | 給數據減負,刻不容緩!

開關 主動 引入 least 頻率 運算 性能 定期刪除 為什麽 前言 自古兵家多謀,《謀攻篇》,“故上兵伐謀,其次伐交,其次伐兵,其下攻城。攻城之法,為不得已”,可見攻城之計有很多種,而爬墻攻城是最不明智的做法,軍隊疲憊受損、錢糧損耗、百姓遭殃。故而我們有很多迂回之策,謀

撩課-MySQL1-數據簡介

index 整體 sele 數據庫名 16px csharp lec 廣泛 rip 學習地址:[撩課-JavaWeb系列1之基礎語法-前端基礎][撩課-JavaWeb系列2之XML][撩課-JavaWeb系列3之MySQL][撩課-JavaWeb系列4之JDBC][撩課-J

python 3下文字檔案的編解碼

很多次遇到python 3下的檔案編碼,解碼問題,我這裡的平臺是mac,下面吐血搞一波。。 1. ASCII編碼: 字串是一種資料型別,但是,字串比較特殊的是還有一個編碼問題。因為計算機只能處理數字,如果要處理文字,就必須先把文字轉換為數字才能處理。最早的計算機在設計時採用8個位

Linux下多資料夾編寫Makefile

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

linux中更新glibc檔案到2.17

1 確保安裝過gcc yum install gcc 2 獲取glibc相關版本 wget http://ftp.gnu.org/pub/gnu/glibc/glibc-2.17.tar.xz 3 解壓建立目錄 xz -d glibc-2.17.tar.xz tar -x

python tsfresh特徵中文更新中)

  tsfresh是開源的提取時序資料特徵的python包,能夠提取出超過64種特徵,堪稱提取時序特徵的瑞士軍刀。最近有需求,所以一直在看,目前還沒有中文文件, 有些特徵含義還是很難懂的,我把我已經看懂的一部分放這,沒看懂的我只寫了標題,待我看懂我添加註解。 tsfresh.fea