makefile專題:自動生成依賴關系(下)

1. 問題引入——如何在makefile中組織.dep文件到指定目錄稚失?

解決思路:當include發(fā)現(xiàn).dep文件存在時:
1)通過規(guī)則和命令創(chuàng)建deps文件夾
2)將所有.dep文件創(chuàng)建到deps文件夾
3).dep文件中記錄目標文件的依賴關系


.PHONY : all

MKDIR := mkdir
RM := rm -rf
CC := gcc

DIR_DEPS := deps

SRCS := $(wildcard *.c)
DEPS := $(SRCS:.c=.dep)
DEPS := $(addprefix $(DIR_DEPS)/, $(DEPS))

all : 
    @echo "all"

ifeq ("$(MAKECMDGOALS)", "all")
-include $(DEPS)
endif

ifeq ("$(MAKECMDGOALS)", "")
-include $(DEPS)
endif

$(DIR_DEPS) :
    $(MKDIR) $@

ifeq ("$(wildcard $(DIR_DEPS))", "")
$(DIR_DEPS)/%.dep : $(DIR_DEPS) %.c
else
$(DIR_DEPS)/%.dep : %.c
endif
    @echo "Creating $@ ..."
    @set -e; \
    $(CC) -MM -E $(filter %.c, $^) | sed 's,\(.*\)\.o[ :]*,objs/\1.o : ,g' > $@

clean : 
    $(RM) $(DIR_DEPS)

2. include暗黑操作:

1)使用減號(-)不但關閉了include發(fā)出的警告,通過關閉了錯誤政勃;當錯誤發(fā)生時make將忽略這些錯誤锭碳!
2)如果include觸發(fā)規(guī)則創(chuàng)建了文件酥艳,include的位置將替換為文件的內(nèi)容景殷;

.PHONY : all

include test.txt

all : 
    @echo "this is all"

test.txt :
    @echo "creating $@..."
    @echo "other : ; @echo ""this is test.txt""" > test.txt

3)如果include包含的文件存在仇祭,之后還會發(fā)生什么?

.PHONY : all

include test.txt

all : 
    @echo "this is all"

test.txt : b.txt
    @echo "creating $@..."

output:

$ make all
creating test.txt...
this is all

當include的文件存在時梆暖,并且對應的規(guī)則及其規(guī)則的依賴(依賴的時間戳比目標文件的時間戳更新時)也存在時伞访,這個文件的規(guī)則命令將會被執(zhí)行。

3. 關于include的總結(jié)

  • 當目標文件不存在時:以文件名查找規(guī)則轰驳,并執(zhí)行
  • 當目標文件不存在時厚掷,且查找到的規(guī)則中創(chuàng)建了目標文件:將創(chuàng)建成功的目標文件中的內(nèi)容包含進當前makefile
  • 當目標文件存在時,將目標文件包含進當前makefile中级解,以目標文件名查找是否有相應的規(guī)則:
    1)如果有:比較規(guī)則的依賴關系冒黑,決定是否執(zhí)行規(guī)則的命令
    2)如果沒有:無操作
  • 當目標文件存在,且目標名對應的規(guī)則被執(zhí)行
    1)規(guī)則中的命令更新了目標文件:make重新包含目標文件勤哗,替換之前包含的內(nèi)容
    2)目標文件未被更新:無操作

聲明:此文章為本人在學習狄泰軟件學院《十二月提升計劃》所做的筆記抡爹,參考書籍《專業(yè)嵌入式軟件開發(fā)》——李云,文章中包含狄泰軟件資料內(nèi)容和《專業(yè)嵌入式軟件開發(fā)》資料內(nèi)容芒划,一切版權歸狄泰軟件《專業(yè)嵌入式軟件開發(fā)》所有豁延!

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市腊状,隨后出現(xiàn)的幾起案子诱咏,更是在濱河造成了極大的恐慌,老刑警劉巖缴挖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袋狞,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機苟鸯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門同蜻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人早处,你說我怎么就攤上這事湾蔓。” “怎么了砌梆?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵默责,是天一觀的道長。 經(jīng)常有香客問我咸包,道長桃序,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任烂瘫,我火速辦了婚禮媒熊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坟比。我一直安慰自己芦鳍,他們只是感情好,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布葛账。 她就那樣靜靜地躺著柠衅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪注竿。 梳的紋絲不亂的頭發(fā)上茄茁,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天魂贬,我揣著相機與錄音巩割,去河邊找鬼。 笑死付燥,一個胖子當著我的面吹牛宣谈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播键科,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼闻丑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了勋颖?” 一聲冷哼從身側(cè)響起嗦嗡,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饭玲,沒想到半個月后侥祭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年矮冬,在試婚紗的時候發(fā)現(xiàn)自己被綠了谈宛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡胎署,死狀恐怖吆录,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情琼牧,我是刑警寧澤恢筝,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站障陶,受9級特大地震影響滋恬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抱究,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一恢氯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鼓寺,春花似錦勋拟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苦银,卻和暖如春啸胧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幔虏。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工纺念, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人想括。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓陷谱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瑟蜈。 傳聞我的和親對象是個殘疾皇子烟逊,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. makefile中的include關鍵字 類似C語言中的include 將其他文件的內(nèi)容原封不動地搬入當前文...
    編程半島閱讀 621評論 0 0
  • 來自陳浩的一片老文,但絕對營養(yǎng)铺根。 示例工程:3 個頭文件*.h宪躯,和 8 個 C 文件*.c。 初 編譯過程位迂,源文件...
    周筱魯閱讀 4,696評論 0 17
  • makefile關系到整個工程的編譯規(guī)則访雪,一個工程中的源文件不計其數(shù)予颤,按其類型、功能冬阳、模塊分別放在若干的目錄當中蛤虐,...
    Joe_HUST閱讀 1,880評論 0 3
  • SVG動畫compile'com.eftimoff:android-pathview:1.0.8@aar'
    Solang閱讀 244評論 0 0
  • 夏天到了,吃一碗炸醬面是人生樂事肝陪,可是自己炸醬老是炸不出想要的味道驳庭,恰逢友人來訪,根據(jù)口述秘方小試牛刀一把氯窍,果然好...
    智行_c25a閱讀 292評論 1 2