makefile學習筆記 makefile概述

2021-08-18 21:34:49 字數 1414 閱讀 2623

20180411 makefile學習筆記-makefile概述

makefile主要是在unix下軟體編譯時寫的,window下一般不用(unix裡makefile做的事 相當於window裡ide所做的事)。

會不會寫makefile,從乙個側面說明了乙個人是否具備完成大型工程的能力。

makefile主要做的事:makefile關係到了整個工程的編譯規則。乙個工程的原始檔不計其數,,其按照型別、功能、模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更複雜的功能操作,因為makefile就像乙個shell指令碼一樣,其中也可以執行作業系統的命令。

makefile帶來的好處就是---「自動化編譯」,一旦寫好,只需要乙個make命令,整個工程完全自動編譯,極大地提高了軟體開發的效率,make是乙個命令工具,是乙個解釋makefile中指令的命令工具,一般來說,大多數ide都有這個命令,比如:delphid make,visual c++的nmake,linux下gnu的make。可見,makefile已經成為了一種在工程方面的編譯方法。

不同廠商的make各不相同,也有不同的語法,這裡僅對gnu的make進行講述,適配環境是 redhat linux 8.0,make的版本是3.80。這個make應用最廣泛。這個make也是最遵循於ieee1003.2-1992標準的(posix.2)。

本文中,將以c/c++原始碼作為基礎,所使用的預設編譯器是unix下的gcc和cc。

程式編譯的一般規範是:無論是c、c++還是pas,首先要把原始檔編譯成中間**檔案,在windows下也就是.obj檔案,unix下的是.o檔案,即object file。這個動作叫編譯,然後再把大量的object file合成執行檔案,這個動作叫鏈結。

編譯時,編譯器需要的是語法的正確,函式與變數的宣告的正確。對於後者,通常是你需要告訴編譯器標頭檔案的所在位置(標頭檔案中應該只是宣告,而定義應該放在c/c++檔案中),只要所有的語法正確,編譯器就可以編譯出中間目標檔案。一般來說,每個原始檔都應該對應於乙個中間目標檔案(o檔案或是obj檔案)。

鏈結時,主要是鏈結函式和全域性變數,所以,完美可以使用這些中間目標檔案(o檔案或是obj檔案)來鏈結我們的應用程式。鏈結器並不管函式所在的原始檔,只管函式的中間目標檔案(object file),在大多數情況下,由於原始檔太多,編譯生成的中間目標檔案太多,而在鏈結時需要明顯地指出中間目標檔名,這對於編譯很不方便,所以完美要給中間目標檔案打包,在windows下這種包叫「庫檔案」(library file)也就是.lib檔案,在unix下,是archive檔案,也就是.a檔案。

注意:在鏈結程式時,鏈結器會在所有的object file中找尋函式的實現,若找不到,就會報鏈結錯誤碼(linker error),在vc下,這種錯誤一般是: link 2001錯誤,意思是說,鏈結器未能找到函式的實現,你需要指定函式的object file。

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 變數名 值 引用變數可在之後定義 ...

makefile 學習筆記

makefile規則如下所示 目標 依賴檔案列表 命令列表 1 目標通常是要產生的檔名稱,目標可以是可執行檔案或obj檔案,也可是乙個動作的名稱.2 依賴檔案是用來輸入從而產生目標的檔案.乙個目標通常有幾個依賴檔案.1 make支援三種萬用字元 和 代替乙個和多個字元 代替乙個字元 2 makefi...