在乙個工程中有很多原始檔,按照其型別、功能、模組分別放在若干目錄中,makefile定義了一系列的規則來指定那些檔案需要先編譯,那些需要後編譯,還有一些更複雜的功能操作(在windows中,ide已經為我們做了這些工作)。makefile的特點就是「自動化編譯」,一旦寫好乙個make命令,整個工程完全自動編譯。
一般來說,無論是c、c++還是其他語言,首先要把原始檔編譯成中間**檔案,在windows下是 .obj檔案,unix下是 .o檔案,這個過程會將cpp檔案中包含的標頭檔案新增到cpp檔案中,用標頭檔案裡的具體內容來代替include。然後再把大量的object file合成執行檔案,這個動作叫做鏈結。在編譯時,編譯器需要的是語法正確、函式與變數的宣告正確,對於鏈結來說,你需要告訴編譯器標頭檔案所在位置,在語法正確的情況下,編譯器就可以編譯出中間目標檔案(一般來說,每個原始檔都應該對應於乙個中間目標檔案)。
鏈結時主要鏈結函式和全域性變數,聯結器不關心函式所在的原始檔,只管函式的中間目標檔案,但在大多數情況下,由於原始檔太多,編譯生成的中間目標檔案也太多,而在鏈結的時候需要明顯指出中間目標檔名,這對編譯很不方便。因此,我們要給中間檔案打個包,在windows中這種包叫「庫檔案」(library file),即 .lib檔案,在unix下,是archive file,也就是 .a檔案。
make命令執行時,需要乙個makefile檔案,用來告訴make命令需要怎麼樣的去編譯和鏈結程式。
對於乙個有若干個c檔案及若干個標頭檔案的工程來說,寫乙個makefile來告訴make命令如何編譯和鏈結這幾個檔案,規則如下:
makefile學習筆記 makefile概述
20180411 makefile學習筆記 makefile概述 makefile主要是在unix下軟體編譯時寫的,window下一般不用 unix裡makefile做的事 相當於window裡ide所做的事 會不會寫makefile,從乙個側面說明了乙個人是否具備完成大型工程的能力。makefil...
Makefile學習筆記
makefile for boot asm nasm 定義變數 asmflags i include run qemu system i386 hdd boot.img boot.img boot.asm asm boot.asm f bin o boot.img install run clean...
Makefile學習筆記
本文為學習筆記,僅供參考,如有好的建議歡迎指出!makefile規則 目標檔案 依賴檔案 tab 命令 命令前必須有乙個tab exp test main.c gcc main.c o test 隱式規則 o c 同名匹配 變數 類似於c中的巨集,引用方式 arg 變數名 值 引用變數可在之後定義 ...