Makefile之關於程式的編譯和連結
阿新 • • 發佈:2019-01-01
關於程式的編譯和連結
——————————
在此,我想多說關於程式編譯的一些規範和方法,一般來說,無論是C、C++、還是pas,首先要把原始檔編譯成中間程式碼檔案,在Windows下也就是.obj檔案,UNIX下是.o檔案,即ObjectFile,這個動作叫做編譯(compile)。然後再把大量的ObjectFile合成執行檔案,這個動作叫作連結(link)。
編譯時,編譯器需要的是語法的正確,函式與變數的宣告的正確。對於後者,通常是你需要告訴編譯器標頭檔案的所在位置(標頭檔案中應該只是宣告,而定義應該放在C/C++檔案中),只要所有的語法正確,編譯器就可以編譯出中間目標檔案。一般來說,每個原始檔都應該對應於一箇中間目標檔案(
連結時,主要是連結函式和全域性變數,所以,我們可以使用這些中間目標檔案(O檔案或是OBJ檔案)來連結我們的應用程式。連結器並不管函式所在的原始檔,只管函式的中間目標檔案(ObjectFile),在大多數時候,由於原始檔太多,編譯生成的中間目標檔案太多,而在連結時需要明顯地指出中間目標檔名,這對於編譯很不方便,所以,我們要給中間目標檔案打個包,在Windows下這種包叫“庫檔案”(LibraryFile),也就是.lib檔案,在UNIX下,是ArchiveFile,也就是.a檔案。
總結一下,原始檔首先會生成中間目標檔案,再由中間目標檔案生成執行檔案。在編譯時,編譯器只檢測程式語法,和函式、變數是否被宣告。如果函式未被宣告,編譯器會給出一個警告,但可以生成
好,言歸正傳,GNU的make有許多的內容,閒言少敘,還是讓我們開始吧。