makefile專題:自動生成依賴關(guān)系(續(xù))


.PHONY : all clean rebuild

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

DIR_DEPS := deps
DIR_EXES := exes
DIR_OBJS := objs

DIRS := $(DIR_DEPS) $(DIR_EXES) $(DIR_OBJS)

EXE := app.out
EXE := $(addprefix $(DIR_EXES)/, $(EXE))

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

all : $(DIR_OBJS) $(DIR_EXES) $(EXE)

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

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

$(EXE) : $(OBJS)
    $(CC) -o $@ $^
    @echo "SUCCESS!!! Target => $(EXE)"

$(DIR_OBJS)/%.o : %.c
    $(CC) -o $@ -c $(filter %.c, $^)

$(DIRS) :
    $(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) $(DIRS)

rebuild : 
    @$(MAKE) clean
    @$(MAKE) all 
注意事項:當.dep文件生成后拙泽,如果動態(tài)的改變頭文件間的依賴關(guān)系戒突,那么make可能無法檢測到這個改變椭岩,進而做出錯誤的編譯決策
解決方案:
  • 將依賴文件名作為目標加入自動生成的依賴關(guān)系中
  • 通過include加載依賴文件時判斷是否執(zhí)行規(guī)則
  • 在規(guī)則執(zhí)行時重新生成依賴關(guān)系文件
  • 最后加載新的依賴文件

小結(jié)

  • makefile中可以將目標的依賴拆分寫到不同的地方
  • include關(guān)鍵字能夠觸發(fā)相應(yīng)的規(guī)則的執(zhí)行
  • 如果規(guī)則的執(zhí)行導致依賴更新贼涩,可能導致再次解釋執(zhí)行相應(yīng)規(guī)則
  • 依賴文件也需要依賴于源文件得到正確的編譯決策
  • 自動生成文件間的依賴關(guān)系能夠提高makefile的移植性

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

?著作權(quán)歸作者所有,轉(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)容