Linux的make與makefile的基礎知識

2021-07-31 05:54:43 字數 1404 閱讀 3347

1.了解make工程管理器

所謂工程管理器是指管理工程的工具。假如我們面對是乙個上百個檔案的**構成的專案,假如其中幾個檔案進行了修改,按照之前所學的gcc編譯工具,就不得不把專案內所有的檔案重新編譯一遍,因為編譯器並不知道哪些檔案是最近更新的,但那些沒有改動的源**根本不需要重新編譯,而只須把它們重新鏈結進去即可。所以,人們就希望有這樣一款能夠自動識別更新的檔案**並管理專案的軟體,所以make工程管理器也應運而生了。

make工程管理器是個「自動編譯管理器」,這裡的「自動」是指它能夠根據檔案時間戳自動發現更新過的檔案而減少編譯的工作量,同時,它通過讀入makefile檔案的內容來自動執行大量的編譯工作。使用者只需編寫一次簡單的編譯語句就可以。這不僅提高了工作效率,而且便於管理。

2.了解makefile文件

make是怎樣完成這些神奇的工作呢?它是通過makefile文件做到的。makefile是乙個文字形式的資料庫檔案,其中包含一些規則,它告訴make編譯哪些檔案、怎樣編譯以及在什麼條件下去編譯,甚至於進行更複雜的功能操作,因為makefile就像乙個shell指令碼一樣。make在執行時就會找到makefile檔案,會自動根據修改情況完成原始檔對應.o檔案的更新、庫檔案的更新和最終可執行程式的更新。對於不需要重建的檔案,make什麼也不做。

3.編寫makefile

makefile的格式,既然make工程管理器的一切行為都依據makefile,所以編寫好makefile是至關重要的。

乙個簡單的makefile格式通常的格式是:

target : dependency [dependency [„] ]

(加乙個tab鍵)command**

target:目標體。即make最終需要建立的東西。另外,目標也可以是個make執行的動作名稱,如目標「clean」,可以稱這樣的目標是「偽目標」。

dependency:依賴體。依賴體通常是編譯目標體要依賴的乙個或多個其它檔案。

command:命令。為了從指定的依賴體建立出目標體所需執行的shell命令。

乙個規則可以有多個命令列,每一條命令佔一行。注意:每乙個命令的第乙個字元必須是製表符【tab】,如果使用空格會產生問題,make會在執行過程中顯示missing separator(缺少分隔符)並停止。

target是需要建立的二進位制檔案或目標檔案。dependency是在創target

時需要輸入乙個或多個檔案的列表。命令序列是建立target檔案所需要步驟,如編譯命令。此外,除非特別指定,否則make的工作目錄就是當前目錄。

例項

目標體:hello

依賴檔案:hello.c hello.h

執行的命令:gcc hello.c –o hello

MAKE 巢狀執行make

在一些大的工程中,我們會把我們不同模組或是不同功能的原始檔放在不同的目錄中,我們可以在每個目錄中都書寫乙個該目錄的makefile,這有利於讓我們的makefile變得更加地簡潔,而不至於把所有的東西全部寫在乙個makefile中,這樣會很難維護我們的makefile,這個技術對於我們模組編譯和分段...

linux中的make命令

make命令的選項和引數 k 它的作用是讓make命令在發現錯誤時仍然繼續執行,而不是在檢測到第乙個錯誤時就停下來。n 它的作用是讓make命令輸出將要執行的操作步驟,而不真正執行這些操作 f 它的作用是告訴make命令將哪個檔案作為makefile檔案。如果未使用這個選項,標準版本的make 命令...

make 與makefile的作用

在開發乙個系統時,一般是將乙個系統分成幾個模組,這樣做提高了系統的可維護性,但由於各個模組間不可避免存在關聯,所以當乙個模組改動後,其他模組也許會有所更新,當然對小系統來說,手工編譯連線是沒問題,但是如果是乙個大系統,存在很多個模組,那麼手工編譯的方法就不適用了。為此,在linux系統中,專門提供了...