Makefile檔案理解

2021-09-29 18:42:54 字數 1341 閱讀 5593

makefile檔案:

首先要把原始檔(.c或者.cpp)編譯成中間**檔案,在windows下也就是.obj檔案,unix下是.o檔案,即 object file,這個動作叫做編譯(compile)。然後再把大量的object file合成執行檔案,這個動作叫作鏈結(link)。

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

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

(把原始檔.c/.cpp編譯成中間目標檔案.obj或者.o,鏈結前,先把中間目標檔案打包成.lib 或者.a檔案,然後鏈結為可執行檔案)

makefile裡主要包含了五個東西:顯式規則、隱晦規則、變數定義、檔案指示和注釋。

1、顯式規則。顯式規則說明了,如何生成乙個或多的的目標檔案。這是由makefile的書寫者明顯指出,要生成的檔案,檔案的依賴檔案,生成的命令。

2、隱晦規則。由於我們的make有自動推導的功能,所以隱晦的規則可以讓我們比較粗糙地簡略地書寫makefile,這是由make所支援的。

3、變數的定義。在makefile中我們要定義一系列的變數,變數一般都是字串,這個有點你c語言中的巨集,當makefile被執行時,其中的變數都會被擴充套件到相應的引用位置上。

4、檔案指示。其包括了三個部分,乙個是在乙個makefile中引用另乙個makefile,就像c語言中的include一樣;另乙個是指根據某些情況指定makefile中的有效部分,就像c語言中的預編譯#if一樣;還有就是定義乙個多行的命令。有關這一部分的內容,我會在後續的部分中講述。

5、 注釋。makefile中只有行注釋,和unix的shell指令碼一樣,其注釋是用「#」字元,這個就像c/c++中的「//」一樣。如果你要在你的makefile中使用「#」字元,可以用反斜框進行轉義,如:「#」。

我所理解的makefile檔案

我所理解的makefile檔案 在linux下程式設計時我們會用到gcc和g 編譯器,無論是gcc還是g 在windows下ide已經封裝了所有的編譯鏈結命令,但是linux下我們必須自己編寫命令一步一步編譯和鏈結。如果我們不想這樣做的話,我們可以寫乙個makefile檔案,把編譯鏈結命令寫入,然後...

Makefile檔案解析

在makefile中,除第一條命令外,每一條命令的開頭必須是tab製表符,比如 cc arm linux gcc exec hello objs hello.o cflags ldflags static all exec exec objs cc ldflags o objs clean rm f...

makefile檔案介紹

cflags 表示用於 c 編譯器的選項,cxxflags 表示用於 c 編譯器的選項。這兩個變數實際上涵蓋了編譯和彙編兩個步驟。cflags 指定標頭檔案 h檔案 的路徑,如 cflags i usr include i path include。同樣地,安裝乙個包時會在安裝路徑下建立乙個incl...