經常有人需要順序編譯乙個乙個的模組,最後才連線生成可執行程式,但是如果乙個模組乙個模組地執行make,比較馬法,下面是乙個經過驗證的makefile;
可以根據自己的需要修改subdirs巨集的值,設定自己需要編譯的目錄的順序.就可以了.
#編譯所有子目錄
#subdirs=`ls -d */ | grep -v 'bin' | grep -v 'lib' | grep -v 'include'`
#編譯指定子目錄
subdirs=dir1 dir2 dir3
define make_subdir
@for subdir in $(subdirs) ; do \
( cd $$subdir && make $1) \
done;
endef
all:
$(call make_subdir , all)
install :
$(call make_subdir , install)
debug:
$(call make_subdir , debug)
clean:
$(call make_subdir , clean)
gcc -o hello hello.c -i /home/hello/include -l /home/hello/lib -lworld
上面這句表示在編譯hello.c時-i /home/hello/include表示將/home/hello/include目錄作為第乙個尋找標頭檔案的目錄,
尋找的順序是:/home/hello/include-->/usr/include-->/usr/local/include
-l /home/hello/lib表示將/home/hello/lib目錄作為第乙個尋找庫檔案的目錄,
尋找的順序是:/home/hello/lib-->/lib-->/usr/lib-->/usr/local/lib
-lworld表示在上面的lib的路徑中尋找libworld.so動態庫檔案(如果gcc編譯選項中加入了「-static」表示尋找libworld.a靜態庫檔案)
$@ 表示目標檔案
$^ 表示所有的依賴檔案
$< 表示第乙個依賴檔案
$? 表示比目標還要新的依賴檔案列表
wildcard : 擴充套件萬用字元
notdir : 去除路徑
patsubst :替換萬用字元
makefile學習筆記 makefile概述
20180411 makefile學習筆記 makefile概述 makefile主要是在unix下軟體編譯時寫的,window下一般不用 unix裡makefile做的事 相當於window裡ide所做的事 會不會寫makefile,從乙個側面說明了乙個人是否具備完成大型工程的能力。makefil...
MakeFile 檔案的作用
makefile檔案儲存了編譯器和聯結器的引數選項,還表述了所有原始檔之間的關係 源 檔案需要的特定的包含檔案,可執行檔案要求包含的目標檔案模組及庫等 建立程式 make程式 首先讀取makefile檔案,然後再啟用編譯器,彙編器,資源編譯器和聯結器以便產生最後的輸出,最後輸出並生成的通常是可執行檔...
makefile檔案的編寫
簡單的說,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至可以在makefile中執行shell指令碼。makefile帶來的好處就是 自動化編譯 一旦寫好,只需要乙個make命令,整個工程完全自動編譯,極大的提高了軟體開發的效率。關於程式...