1. 程式人生 > >makefile 自動推導的坑-檔案更新

makefile 自動推導的坑-檔案更新

    有 a.c, makefile 兩個檔案,使用自動推導如下

makefile:

objs = a.o
all: $(objs)
    gcc -o all $(objs)

.PHONY: clean
clean:
    rm all $(objs)

第一次 make 後,會生成 all 的執行檔案和 a.o 到中間檔案;再次 make 會提示 all 過時了,這是可以理解的。

如果對 a.c 進行了修改,再 make 下,會發現, 還是提示 all 過時了。

==================================================================

targets: prerequisites
    recipe
    ...

gnu make 中 原文:

    The criterion for being out of date is specified in terms of the prerequisites, which

consist of file names separated by spaces.

====================================================================

過時時間由 prerequisites 指定的,看到這裡我們再分析上面 makefile 問題

a.o 顯然是自動推導生成的,而 a.o 的 prerequisites 為 null,說明只有當 a.o 不存在時,會生成 a.o;

當 a.o 存在時,不會更新 a.o了。這就是第一次 make 生成,第二次 make 過時的原因了。

知道這一點後,為了能夠對原始檔修改後重新生成 .o 的檔案,我們怎麼修改呢?

方法一:

    用 make clean 指令後,再 make

方法二:   

    在自動推導中顯式指明依賴關係, a.o: a.c

objs = a.o
all: $(objs)
    gcc -o all $(objs)
a.o: a.c

.PHONY: clean
clean:
    rm all $(objs)

相關推薦

Makefile自動生成依賴檔案,並自動編譯

因為經常要用到makefile編譯,每次都為標頭檔案的依賴關係頭痛,所以這次費了兩天時間開發了一個通用的makefile,它可以自動生成依賴檔案,並編譯,當然你要按檔案裡面的說明來填充一些中間檔名. 程式碼如下: #自動依賴項(*.d),並編譯生成檔案 #編譯選項 LDF

makefile 自動生成依賴檔案

gcc  -c -o a.o a.c -Wp, -MD a.d a.d就是生成的依賴檔案 在a.d中 有 a.o:a.c a.h  (以及其他依賴的標頭檔案等) 在makefile中,包含依賴檔案,使用依賴檔案,使用如下: include a.d %.o : %.c$(CC

makefile 自動推導的坑-檔案更新

    有 a.c, makefile 兩個檔案,使用自動推導如下makefile:objs = a.o all: $(objs)     gcc -o all $(objs) .PHONY: clean clean: rm all $(objs) 第一次 make

Xcode自動管理證書檔案模式下更新provisioning profile檔案

日常打包中給一個provisioning profile檔案新增一個新裝置,然後下載到Xcode中,打包後會發現新增的裝置沒有被包含在api包中。這時候需要先把Xcode中的provisioning profile檔案刪除掉(provisioning profile 在Build Settings中

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

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

makefile 自動生成標頭檔案依賴關係

在使用makefile 自動生成標頭檔案依賴是,大家多半使用了下面這個方法。 這個sed語句被稱之為 "上帝的符號",可讀性不言而喻。(PS:CSDN這個排版怎麼也搞不好,只能用圖片了。) gcc的 -MMD 選項可以自動生成帶有依賴規則的.d檔案,為建立標頭檔案依賴帶來

使用gulp進行自動在js檔案後加版本號,使在更新的時候不必手動清理快取

原理 如果不是第一次訪問這個網頁,瀏覽器會留下js或css的快取,這對開發人員釋出新版本系統的時候會起到不利影響, 總會叫使用者去清理快取.解決方案是在js或css檔案後面加版本號,如: <script src="src/components/$m

makefile: 如何在.h檔案更新之後,相應的.o檔案能重新編譯

特別是在c++的模板編寫中,因為修改的都是.h檔案。如果makefile 中沒有設定.o檔案依賴於相應的.h檔案,將導致make的時候提示說 make: `bin/runner’ is up to date y核心就是讓.o檔案能依賴相應的.h檔案。

Makefile自動編譯目錄下的所有.C檔案

自動編譯目錄下的所有.C檔案的Makefile指令碼CC=gcc CFLAGS_WARN = -Wall DEFINE = INCLUDE = -I. SOURCES = $(wildcard *.c) OBJS = $(patsubst %.c,%.o,$(SOUR

SVN使用鉤子函數(post-commit)自動送到業務服務器

svn方法對比:update和export對比update會產生隱藏文件,存在安全隱患,update是增量的,在代碼比較大的時候適用export直接導出幹凈的代碼,不會存在隱藏文件,不適合較大的庫 方法一:update 鉤子模版: 倉庫中hooks目錄下post-commint模版可以觸發shell>c

楊澤業:給你的網站添加百度自動送頁面代碼

復制 push 自動 https rap width HP 百度 分享圖片 最近我的 博客添加了360的自動推送頁面代碼,今天瀏覽百度的官方文件裏面,也發現了,其實百度也是可以把你自己的網站內容自動推送到百度搜索引擎裏面,以方便更快的收錄。 看完了百度官方的介紹,也是和36

shell自動生成的檔案有一個問號的字尾

寫了一個指令碼,自動處理一個檔案。   rm -f session.log rm -f link wget ftp://hostname/f:/ddn/session.log egrep '^N[[:digit:]]|^D[1-4]' session.log >>lin

idea配置自動生成java檔案頭資訊

1.   操作流程:  Settings-> Editor -> File and Code Templates -> Class   2.  配置模板 2. 1 去掉 #parse("File Header.java")

makefile生成 *.d 依賴檔案及 gcc -M -MF -MP 等相關選項說明

1. 為什麼要使用字尾名為 .d 的依賴檔案? 在 Makefile 中, 我們的依賴關係可能需要包含一系列的標頭檔案。  比如  main.c 原始檔內容如下: #include "stdio.h" #include "defs.h" int main(int a

make之makefile 十 函式庫檔案

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

webpack4 系列教程(十三):自動生成HTML檔案

作者按:因為教程所示圖片使用的是 github 倉庫圖片,網速過慢的朋友請移步《webpack4 系列教程(十三):自動生成 HTML 檔案》原文地址。更歡迎來我的小站看更多原創內容:godbmw.com,進行“姿勢”交流 ♪(^∇^*) 0. 課程介紹和資料 >>>本節

hosts檔案更新與gmail訪問解決方案

大家都知道,在我們當前的網路,是無法訪問Google相關的服務網址的。這就意味著需要藉助《外網訪問軟體》(Fan * qiang),其實目前大部分的《外網訪問軟體》都被和諧了,就在前幾天,我才知道我經常使用的一款軟體也被和諧了(具體是哪款,在此就不提了)。那麼作為開發者的我們又不能不使用Google

使用Makefile連結so庫檔案

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

Pycharm在建立py檔案時,如何自動新增預設檔案頭註釋?

PyCharm是一款很好用的編寫Python工程的IDE,用PyCharm建立一個Python檔案或者向工程新增一個.py檔案時,為了更好的使所編寫的程式碼在各操作環境更好的執行,我們往往需要在.py檔案中新增標頭檔案標註相關資訊。例如: 開啟PyCharm程式,根據選單欄中按照如下進入設定: Fil

Makefile編譯靜態庫檔案和動態庫檔案

    最近要用到的簽名演算法只給了一堆原始碼沒有給庫檔案,api都不好呼叫,於是嘗試著用Makefile給一堆c原始碼編譯靜態連結庫檔案和動態連結庫檔案。 Makefile檔案編輯的相關資料連結: https://www.cnblogs.com/yya