1.定義:makefile是通過制定規則來編譯程式的乙個指令碼而已。在linux中使用make命令來執行makefile檔案。
2.命名:makefile或makefile,若是指定其他名稱。如:makefile.可以這樣使用make -f makefile或make clean -f makefile
3.規則:makefile
target:prerequisties
(tab鍵)command
命令實現:比較target和prerequisties的建立時間,若target比prerequisties時間早,或是不存在,就執行下面的命令。若prerequisties不存在,就在下個標籤中找,若找不到,就報錯。這個就是依賴關係。一層層去找。
4.makefile裡面的內容
makefile裡面包含5個東西:顯示規則,隱諱規則,變數定義,檔案指示及注釋
顯示規則:就是makefile中定義的目標和命令的依賴關係
隱諱規則:make命令自動實現的自動推到
變數定義:像程式設計語音中的,取個名字包含目標或其他名稱
檔案指示:1。makefile中包含另一makefile(如:include)。2.根據某些情況指定makefile中有效部分(#if)。3.定義乙個多行的命令
注釋:#
5.引用其他makefile
語法:include 說明(inlcude前面可以有空格但是不能有tab), filename可以帶路徑和萬用字元,及變數。如include foo.make *.mk, $(sb) 用空格間隔
6.makefile工作流程
1.讀入所有的makefile
2.讀入include的makefile
3.初始化檔案中的變數
4.推到隱諱規則
5.為所有的規則建立依賴鏈
6.根據依賴關係,決定生產目標
7.執行命令
7.makefile中特殊用法:
7.1萬用字元:*,?, ...。支援轉義字元\
7.2.關鍵字
wildcard
vpath:自動搜尋,
vpath ,在dirctories下搜尋符合patter
vpath ,vpath,分別清楚特定格式路徑,和清楚所有被設定的路徑
eg.vpath %.h ../headers,在「../headers」目錄下搜尋所有.h檔案
vpath %.c foo:bar 現在foo目錄下找.c, 再在bar目錄下找.c
自動化變數:$@目標集,$%當目標是函式庫檔案,則表示規則中的目標成員。$《表示依賴目標中的第乙個目標。$?所有比目標新的依賴目標集合,以空格分隔。$+所有依賴目標集合。$*表示目標模式中%及之前的部分。
d和f:比如:dir/foo.o.對$(@d)為dir.。對$(@f)為foo.o
$(*d),$(*f)為檔案目錄和檔案部分
其他類推。。。
makefile編寫相關符號及命令說明
1 含義 例 main main.omytool1.o mytool2.o gcc o 表示目標檔案,如 main,表示依賴檔案,如main.o mytool1.o mytool2.o。2 含義 例 name name1 name2 command 表示依次跳轉,執行相應標籤或目標,比如上例,先跳轉...
makefile簡說 編寫makefile
linux下原始碼編譯 linux下原始碼編譯c c 通常使用gnu工具鏈。c c 的編譯過程,通常為原始檔 c cc cpp字尾檔案 編譯為中間目標檔案 即生成為.s o等字尾的中間檔案 再通過鏈結生成可執行檔案 編譯器的編譯過程大致分為四個步驟 預處理 編譯 彙編和鏈結 建立乙個專案檔案proj...
makefile編寫方法
什麼是makefile?或許很多winodws的程式設計師都不知道這個東西,因為那些windows的ide都 為你做了這個工作,但我覺得要作乙個好的和 professional的程式設計師,makefile還是要懂 這就好像現在有這麼多的html的編輯器,但如果你想成為乙個專業人士,你還是要了解 h...