層級目錄結構的Makefile編寫方法. 層級目錄結構的Makefile編寫方法.0.前言1.如何編譯整個工程2.過濾每層不需要編譯的目錄3將所有輸出文件定向輸出. 層級目錄結構的Makefile編寫方法.0.前言1.如何編譯整個工程2.過濾每層不需要編譯的目錄3將所有輸出文件定向輸出. 層級目錄結 ...
層級目錄結構的Makefile編寫方法.
0.前言
假如現在有這樣一個目錄結構:
要怎麼實現簡潔的自動化編譯呢?
現在我想要實現的效果
1.在頂級目錄,直接make即可編譯整個工程.
2.可以很方便的在Makefile中添加或過濾掉只有我想編譯的目錄或不需要編譯的目錄.
3.新添加的模塊,只需要直接編寫本模塊的Makefile即可,其餘地方不需要改動.
4.將所有輸出的目標文件和可執行文件,定向輸出到指定目錄(如out/bin;out/obj)
因為新建的工程,暫且就這些基本功能,如果還有沒實現的好目標,再繼續添加.
接下來一個一個目標的看看怎麼實現.
1.如何編譯整個工程
想要編譯整個工程,那麼所有需要編譯的目錄都要能夠編譯.
最簡單的方法:依依編譯每一個需要的目錄.
如:
WIFI := wifi BLUETOOTH := bluetooth all: cd $(WIFI); make cd $(BLUETOOTH); make
很直觀,但是每個目錄寫一遍,就是每添加一個模塊,你都得在Makefile裡面加一句,寫起來內容偏多.
另一種遞歸的編譯層層目錄.
要這麼做,首先需要獲得每層目錄下的目錄名:
GET_SUBDIRS1 := $(shell find . -maxdepth 1 -type d) GET_SUBDIRS2 := $(basename $(patsubst ./%,%,$(GET_SUBDIRS