.Description 這是一個簡單的 *GNU makefile for 'C++' project* 類似AutoTool等工具, 不過又更簡化了, 操作方法是利用GNUMakefile裡的targets 當作指令, 生出一個targets檔, 以後鍵入 `make all` 就會自動把所有targets都 編譯出來. .Commands * `make init` + 初始化, 設定完之後所在位置會多幾個資料夾如下 ** 'bin/' 放編譯出來的執行檔 ** 'dep/' dependency相關資料, 內容會自動生成, 不用理它 ** 'inc/' 自定義的include file放置位置 ** 'src/' source code放置位置 ** 'obj/' obj file放置位置, 會自動生成, 不用理它 * `make new NAME= [OBJS= LIBS=]` + 新增一個target, 須給定目標名 , 並且此Makefile會假定 `main() { ... }` 放在 'src/.cpp' 而最終輸出會是 'bin/' . + 關於 'OBJS=' 與 'LIBS=' 參考下面說明 * `make add NAME= [OBJS= LIBS=]` + 針對target為 '' 的目標新增需要的 '' , 與 ''. '' 的部份會用 `pkg-config` 去解讀, 例如 '' 為 'opencv lapackpp' 則link時會被以下指令展開 + `pkg-config --libs opencv lapackpp` + 而 '' 的部份則只需要給 *name* 就好, 不需要有完整個 pathname, 例如 例如 '' 是 'a b c' 則此makefile會視為 ** source code: 'src/a.cpp src/b.cpp src/c.cpp' ** obj file: 'obj/a.o obj/b.o obj/c.o' * `make del NAME= [OBJS= LIBS=]` + 與 add相反, 嘗試將指定target所需的''和''移除 * `make clean` + 將 'bin/*' 'dep/*' 'obj/*' 清除, 有時候覺得dependency怪怪的 時可以嘗試執行此指令 [NOTE] 其中整個project到底有哪些obj file會完全依照 *src/* 裡面有哪些 `.cpp` 檔決定 ===== GNUMakefile 就是一個 Makefile, 不過裡面有些東西是 `GNU-make` only的 ===== GNUMakefile.dependency.bash 產生 dependency檔用的