- 問題:
如何使用make來使makefile recursive make ?
(也就是你有一個project此project又由各個子component組成)
-- 單純只make的方法:
使用 make -C
注意: $(SUBDIR)一定要設.PHONY不然不會有任何執行的動作
-- 如果要套用make clean和make install到各個子目錄又該如何寫?
方法有點tricky,我們在上面使用 $(SUBDIR)的方式就好像使用for迴圈一樣一個個目錄進去make。
但是有個問題: 如果make all了但是邏輯網下走$(SUBDIR)時我們就無法分辨: make all, make install, 還是make clean的情況.
http://lackof.org/taggart/hacking/make-example/的作者就提出一個方法: 讓各個targets(all, install, clean)有自己的$(SUBDIR)。
當進入自己的$(SUBDIR)時才真的做字串的替換。這樣子就可以解掉使用make -C只能make all的問題。
注意: 題外話作者不建議在makefile使用for的方式一個個進去make。因為其缺點就是
- 1. 無法享有concurrent make的好處。而且
- 2. 如果有make fail也不會停下來。
-- Ref:
問題的圖參考:http://stackoverflow.com/questions/1139271/makefiles-with-source-files-in-different-directories