一起學Makefile(一)

2022-03-19 10:07:33 字數 2033 閱讀 3947

make和makefile

makefile檔案幫助我們記錄了整個專案工程的所有需要編譯的檔案列表,這樣我們在編譯時僅需要輸入簡單的make命令就能編譯出我們期望的結果。

makefile檔案反映了整個專案中各個模組的依賴關係,這樣我們改動了某些原始檔以後,僅需簡單的輸入make命令,make工具就會根據makefile檔案裡描述的依賴關係幫助我們分析那些模組需要重新編譯,並執行相應的操作。

在linux/unix開發環境中,makefile檔案則是描述了乙個特定編譯系統所需要的策略,而make工具則是通過解析makefile檔案並執行相應的命令來幫助我們構建其編譯系統。

makefile簡介

makefile就是乙個簡單的文字檔案,它基本就是有一條條規則構造。

一條makefile的規則構成如下:

target:prerequisites

command1

command2

command

target:規則的目標,可以簡單理解為這條規則存在的目的是什麼。通常是程式中間或者最後需要生成的檔名,也可以不對應具體的檔案,而僅僅就是個概念上的規則目標。

prerequisites:規則的依賴列表,可以簡單的理解為要達到本條規則的目標所需要的先決條件是什麼。可以是檔名,也可以是其他規則的目標;

command:規則的命令,可以簡單的理解為當目標所需要的先決條件的滿足了之後,需要執行什麼動作來達成規則的目標。規則的命令其實就是shell命令。一條規則中可以有多行命令,特別注意:每行命令都必須以tab鍵開始。

make工作原理

make命令如何使用?

make從**讀取makefile?

mak如何解析執行makefile檔案的規則?

make命令的基本使用正規化如下:

make [ -f makefile ] [ options ] ... [ targets ] ...

使用make命令最簡單的方式主要有以下四種方式:

1.簡單粗暴,不帶任何引數,直接指向make:

make

2.指定makefile檔案

make –f

3.指定makefile目標

make

4.到指定目錄下執行make

make –c

在執行make 的時候,我們可以帶上 –f 《檔名》引數,來指定make命令從**讀取make檔案;而如果我們不顯示指定,則make就會在當前目錄下依次查詢名字為gnumakefile,和makefile,makefile的檔案來作為其makefile檔案。

在讀取完makefile的內容後,make工具並不是逐條去執行makefile裡的規則,而是以某條規則為突破口,多公尺諾骨牌效應式的去執行makefile裡的規則。而這條作為突破口的規則的目標,稱為終極目標 ,我們可以在執行make時以引數的形式指定終極目標,從而執行作為突破口的規則,如果我們不顯式指定終極目標,make一般情況下將選擇makefile的第一條規則的目標作為終極目標。

一般情況下,make執行一條規則的具體過程是這樣的:

make解析makefile的流程如下:

假設makefile內容如下:

終極目標:依賴a 

依賴b 依賴c

終極目標命令

依賴a:子依賴a1 子依賴a2

依賴a命令

依賴b:子依賴b1 子依賴b2

依賴b命令

依賴c:子依賴c1 子依賴c2

依賴c命令

過程一,以終極目標為樹根,解析出整顆依賴樹:

過程二,對整顆依賴樹以從底到上,從左到右的順序,解析執行每一條規則:

一起學Makefile(六)

命令的回顯 通常,make在執行命令之前都會把執行的命令進行輸出,例如 關閉命令回顯有以下幾種方式 每個需要關閉回顯的命令列之前加上 符號 執行make時機上引數 s 或 slient進製所有執行命令的顯示。在makefile中使用沒有以來的特殊目標時,slient也可以禁止所有命令的回顯。命令的執...

《跟我一起學makefile》學習筆記(一)

最近在學習朱有鵬老師的嵌入式課程,講到了makefile,朱老師推薦了陳皓老師的 跟我一起學makefile 自己對makefile一知半解,決定跟著文件,系統地學習一下,現記錄如下 對應文件的p1 p9 第一部分 概述 makefile,管理大型工程的原始碼,定義一系列規則。指定哪些檔案先編譯 後...

讀《跟我一起學Makefile》有感

其實在之前的工作中有很多的機會接觸到makefile,但是總是沒能拿出時間通讀其語法,我想這與自身不夠積極的態度是直接掛鉤的。先說說在這次的收穫 首先從最基本的語法規則到變數定義,熟悉了其最基本的工作流程 再者結合文中的示例,自己再實際練習,熟悉了其中個別函式及特殊規則的應用。在接觸到專案中的mak...