亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 19073 | 回復: 5
打印 上一主題 下一主題

Makefile中關于depend問題 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-11-30 09:58 |只看該作者 |倒序瀏覽
在一些驅動的Makefile中經?吹:
depend .depend dep:
        $(CC) $(CFLAGS) -M *.c pridriver.o> .depend
ifeq (.depend,$(wildcard .depend))
include .depend
endif
查了一些有關Makefile的文章中也沒有提到,哪位高手能給詳細解釋一些上面一段,感激不盡!

論壇徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [報告]
發(fā)表于 2008-11-30 10:42 |只看該作者

回復 #1 caocao152 的帖子

C 源碼的開頭經常有一系列被包含的頭文件,例如 stdio.h。有一些是系統(tǒng)級的頭文件,有一些是你正在寫的項目的頭文件:

#include <stdio.h>#include "foo.h"int main(....
  要確定在你的 foo.h 被改變之后,這個文件也會被重新編譯,就要在你的 Makefile 這樣寫:

foo: foo.c foo.h
  當你的項目變得越來越大,你自己的頭文件越來越多的時候,要追蹤所有這些頭文件和所有依賴它的文件會是一件痛苦的事情。如果你改變了其中一個頭文件,卻忘了重新編譯所有依賴它的源文件,結果會是很失望的。

這就是depend 的作用,如果不使用這個功能, 則當你修改一個頭文件時, 必須重新把所有的源文件都編譯一次, 使用depend ,就可只編譯包含此頭文件的源文件,可大大節(jié)省時間。





gcc 有一個選項可以分析你的源文件然后產生一個頭文件的列表和它的依賴關系: -MM。

  如果你把下面的內容加到你的 Makefile 里面:

depend:    gcc -E -MM *.c > .depend
  然后運行 make depend,就會產生一個 .depend,里面包含了目標文件,C 文件和頭文件的列表:

foo.o: foo.c foo.h
  如果你改變了 foo.h,下一次運行 make 的時候,所有依賴 foo.h 的文件就會被重新編譯。

  每一次你增加一個頭文件的時候,別忘了運行一次 make depend。

論壇徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
3 [報告]
發(fā)表于 2008-11-30 10:43 |只看該作者
一般來說,make其實是make all的省略;make后面跟的是target,即你要編譯的目標,在makefile里面會列出 這個target依賴于哪幾個別的target,別的target又依賴于另外的target,如此“遞歸”,最終會到依賴的源文件和頭文件;當然,也有可能這個target后面直接就是源文件和頭文件(最簡單的情況)。make all和make depend沒有本質區(qū)別,都是生成某個目標,只是目標名稱不同而已;至于編譯的結果,就取決于makefile的寫法,如果makefile中目標all和目標depend的依賴一樣,那么結果也將是相同的。你前面列出的make 和make depend的區(qū)別沒有錯,但那只是早些時候大家的約定熟成而已,你完全可以修改makefile,把他們的功能完全弄反,F(xiàn)階段,很多軟件已經不需要或者不支持make depend了,比如編譯linux 2.6的時候,根本不需要make depend,而早期的linux 2.4,則一般需要make depend這一步。

論壇徽章:
0
4 [報告]
發(fā)表于 2008-11-30 16:15 |只看該作者
如果沒有depend,可能修改了某個文件,再執(zhí)行make可能覺察不到有任何變化。
make需要查找依賴關系,把依賴于此改動過的文件的所有文件都要重新編譯。

論壇徽章:
0
5 [報告]
發(fā)表于 2008-11-30 17:58 |只看該作者

回復 #2 dreamice 的帖子

還有2個問題想問一下:
1。make  通過比較對應文件(規(guī)則的目標和依賴)的最后修改時間,來決定哪些文
件需要更新、那些文件不需要更新。對需要更新的文件 make 就執(zhí)行數(shù)據庫中所記錄的
相應命令(在 make 讀取 Makefile 以后會建立一個編譯過程的描述數(shù)據庫。此數(shù)據庫
中記錄了所有各個文件之間的相互關系,以及它們的關系描述)來重建它,對于不需要
重建的文件 make 什么也不做!@是Makefile中文手冊中的一段
.depend是否就是上面所說的“編譯過程的描述數(shù)據庫”?
以前看的時候比較匆忙,以為Make會自己去比較文件的修改時間以及依賴關系,只重新編譯需要更新的文件。
2。ifeq (.depend,$(wildcard .depend))
include .depend
endif
.depend和$(wildcard .depend)是不是總相等,那么下面的include .depend始終會執(zhí)行?

論壇徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
6 [報告]
發(fā)表于 2008-11-30 18:57 |只看該作者

回復 #5 caocao152 的帖子

make depend就是將某些雖然從時間上并不需要重新編譯的,再依據這種依賴關系,編譯一下。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP