Makefile 入門

一、什麼是Makefile
一個工程中的源文件不計其數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要後編譯,哪些文件需要重新編譯,甚至於進行更復雜的功能操作,因爲 makefile就像一個Shell腳本一樣,其中也可以執行操作系統的命令。這一切都由make 工具 和 Makefile中的規則文件替我們完成。

二、Makefile 的規則

target ... : prerequissites
     command
...
...

含義:

target 要生成的目標文件,可以是可執行文件,也可以是Object File(編譯後的 .o文件),或者是一個標籤(僞目標)。
prerequisites 要生成目標 target 所需的文件或者目標。也叫生成目標文件的先決條件。
command 生成目標文件需要執行的命令。注意:命令一定要以table鍵開頭。
一個目標文件的生成可能有一個或多個先決條件,而命令決定了以什麼方式生成目標文件(比如使用gcc還是g++工具)。

如果先決條件中有一個以上的文件最後修改時間晚於目標文件,或者目標(target)不存在那麼,make 工具就會執行定義的命令。

二、使用示例
簡單示例:

hello_wrold : hello_world.c
    gcc -o hello_world hello_world.c

 clean:
     rm hello_world

有了Makefile 文件 我們在構造目標文件的時候,只需要執行 make命令,make會按照我們在Makefile 中定義的規則去生成目標文件。當我們在命令行輸入 make clean時 make工具會執行我們定義好的clean 下的命令清理文件。

clean 並不是一個文件,只是我們定義一個動作的名字。叫做標籤。其冒號後面什麼沒有先決條件。make 執行該動作下的命令時,需要我們顯示指定這個標籤的名字。比如可以定義 安裝(make install),清理(make clean)等。

三、make 工作過程
當我們輸入 make 命令後:

檢索。make 在當前工作目錄下找名字叫“Makefile”或者“makefile”的文件。如果找不到則會報錯,提示你沒有指明目標。找到則繼續下面的步驟。
生成目標文件。當找到Makefile 文件時,會找文件中的第一個目標文件,並且把這個文件當做最終的目標文件。
依賴。如果第一個目標文件不存在,或者目標文件所以來的先決文件比目標文件新,那麼就會執行後面對應的命令來生成目標文件。在此過程中先決文件也可以不存在,此時make 會一層一層地去找文件的依賴關係,直到最終生成第一個目標文件。
需要注意的是:make 在找依賴關係時,如果遇到錯誤會直接退出,比如依賴文件都找不到,此時make會直接退出,並報錯。對於命令執行錯誤,make根本不管,只管文件的依賴關係。
--------------------- 
作者:春風來不來 
來源:CSDN 
原文:https://blog.csdn.net/a1414345/article/details/74015788 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章