作者phterry (小風)
看板LinuxDev
標題Re: [問題] 請問怎麼makefile裡去讓別的目錄make?
時間Mon Oct 27 20:55:34 2008
※ 引述《awaysu (阿偉蘇)》之銘言:
: 請教各位~
: 小弟初學有問題想請教~
: 我有A目錄,A目錄裡有B和C目錄,
: 然後B和C目錄裡的makefile是寫好的,
: 我要在A目錄也寫一個makefile
: 要怎麼寫可以執行到B和C目錄的makefile?
: 感謝!
Makefile例: (最前端數字為行數)
1 SUBDIR = B C
2
3 .PHONY: alldir $(SUBDIR)
4
5 alldir: $(SUBDIR)
6 $(SUBDIR):
7 $(MAKE) -C $@
8
9 B: C
這個 Makefile 會依照 SUBDIR 變數裡所包含的資料夾名稱, 一一進去執行
make, 需要注意的是第 9 行的敘述, 這是一個處理相依性的例子, "B: C"
的意思是, 編譯 B 之前, 要先編譯 C.
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.117.199.67
1F:推 uefang:.PHONY是什麼意思? 12/06 10:40
Makefile裡的各個 target 都是以檔案為基礎, 如果該檔案已經存在, 而又沒有
較新的相依條件(prerequisites)的話, 該 target 就不會再次執行. 上例中,
你會發現 target 都是 directory, 在 make 執行時, 這些 directory 已經存在,
又因為沒有相依條件, 因此不會被編譯. 要解決這種情形, 把這些 target 宣告
成 phony target 是一個好方法, make 會把 phony target 視為虛擬的 target
而不去以 target 為檔名(或directory名)去判別 target 是否已被編譯過, 因此
每次打 make 時, 即使有和 target 同名的檔案或 directory 存在, 這些 phony
target 都會被執行.
以 make clean 為例, 如果你的 Makefile 裡沒有 .PHONY: clean , 你可以試著
放一個叫 clean 的檔案進去, 你會發現, 每次打 make clean 時, 都不會做你指
定的 clean 的動作.
總而言之, .PHONY 的用途, 就是解決 Target 及檔名相同時所帶來的衝突.
※ 編輯: phterry 來自: 122.117.199.67 (12/06 14:06)
2F:推 uefang:謝謝... 解釋很清楚.... 感謝您的分享 ^^ 12/06 15:23