Makefile學習總結之執行Make

2021-10-01 05:45:28 字數 1472 閱讀 2338

最簡單的方法:使用不帶任何引數的「make」命令來重新編譯所有過時的檔案。

make的退出狀態有三種

0——狀態為0,執行成功;

2——執行過程出現錯誤,同時會提示錯誤資訊;

1——在執行make時使用了「-q」引數,而且當前工程中粗壯乃過時的目標檔案

部分標準的偽目標和空目標命令

all——作為makefile的頂層目標,一般此目標作為預設的終極目標;

clean——這個偽目標定義了一組命令,這些命令的功能時刪除所有由make建立的檔案;

mostlyclean——和「clean」偽目標功能相似。區別在於它所定義的刪除命令不會全部刪除由make生成的檔案。比如不需要刪除某些庫檔案。

install——將make成功建立的可執行檔案拷貝到shell環境變數「path」指定的某個目錄。典型的,應用可執行檔案被拷貝到目錄「/usr/local/bin,庫檔案拷貝到目錄「/usr/local/lib」目錄下;

print——列印出所有被更改的原始檔列表

tar——建立乙個tar檔案;

shar——建立乙個源**的shell文件;

dist——為原始檔建立發布的壓縮包,可以使各種壓縮方式的發布包。

tags——建立當前目錄下所有原始檔的符號資訊(「tags」)檔案,這個檔案可被vim使用;

check/test——對makefile最後生成的檔案進行檢查;

書寫makefile的目的就是為了告訴make乙個目標是否過期,以及如果重建乙個過期的目標。

防止特定檔案重建,有時候當修改了工程中的某乙個檔案後,並不希望重建那些依賴於這個檔案的目標。在執行make時,因為標頭檔案的改變會導致所有包含它的原始檔被重新編譯,當然終極目標也會被重建。為了避免重新編譯整個工程,我們按照下邊的過程來處理:

a) 第一種:

使用「make」命令對所有需要更新的目標進行重建。保證修改某個檔案之前所有的目標已經是最新的。

編輯需要修改的那個原始檔(修改的標頭檔案的內容不能對之前的編譯的程式有影響,比如:更改了標頭檔案中的巨集定義。這樣會造成已經存在的程式和實現不相符!這裡所說的修改指:不改變已經存在的任何東西,除非你有特殊的要求)。

使用「make -t」命令來改變已存在的所有的目標檔案的時間戳,將其最後修改時間修改到當前時間。

第一種的現實基於的前提:需要對未更改標頭檔案之前的編譯程式進行儲存。更多的情況是:修改這個標頭檔案之前已經修改了很多原始檔或者其它的標頭檔案。並且也沒有執行make。

b) 第二種:

執行編譯,使用「make -o headerfile」,「headerfile」為需要忽略更改的標頭檔案,防止那些依賴這個標頭檔案的目標被重建,忽略多個標頭檔案的修改可使用多個「-o headerfile」。這樣,標頭檔案「headerfile」的修改就不會觸發依賴它的目標被重建。「-o」引數的這種使用方式僅限於標頭檔案(.h),不能使用「-o」來指定原始檔。

執行make -t;

Makefile學習總結之規則的命令

通常系統中可能存在多個不同的shell。但在make處理makefile過程中,如果沒有明確指定,那麼對所有規則中命令列的解析使用 bin sh 來完成 命令回顯 make在執行命令列之前會把執行的命令列輸出到標準輸出裝置。如果規則的命令列以字元 開始,則make在執行這個命令時就不會回顯這個將要被...

arm學習 makefile學習總結

makefile不僅僅是乙個命令的集合體,其中有一些規則是需要理解掌握的。首先,了解makefile的規則 格式 目標 依賴1,依賴2 tap鍵 命令 1 目標,就是我們想生成的檔案。2 依賴往往是我們已經有的檔案,是生成目標的必要條件。3 命令就是利用依賴來產生目標。命令不是任何情況都可以執行的,...

學習筆記之Makefile

makefile 專案管理工具 只將與修改的原始檔相關的 檔案進行編譯,其他的進行連線。stat test.c 可以檢視乙個檔案的修改時間 touch test.c 更新檔案的時間 make p file vi file makefile 內建規則檢視 階段三 makefile 變數宣告,使用變數 ...